在许多情况下,您需要在自定义类中覆盖 GetHashCode
和 Equals
方法。这是因为默认情况下,这两个方法是根据对象的引用进行比较的,而不是根据对象的内容进行比较。
如果您希望将对象存储在哈希表中,或者需要比较对象的内容是否相等,那么您需要覆盖 GetHashCode
和 Equals
方法。
在覆盖 GetHashCode
方法时,您需要确保返回的哈希值是基于对象的内容计算的,并且尽可能地分布均匀。在覆盖 Equals
方法时,您需要确保比较的是对象的内容是否相等,而不是引用是否相等。
以下是一个示例,展示了如何在自定义类中覆盖 GetHashCode
和 Equals
方法:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public override int GetHashCode()
{
unchecked
{
int hashCode = 17;
hashCode = hashCode * 23 + FirstName.GetHashCode();
hashCode = hashCode * 23 + LastName.GetHashCode();
return hashCode;
}
}
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
{
return false;
}
var other = (Person)obj;
return FirstName == other.FirstName && LastName == other.LastName;
}
}
在这个示例中,我们覆盖了 GetHashCode
和 Equals
方法,以便我们可以将 Person
对象存储在哈希表中,并且可以比较它们的内容是否相等。
总之,在许多情况下,您需要在自定义类中覆盖 GetHashCode
和 Equals
方法,以确保正确地比较对象的内容。
领取专属 10元无门槛券
手把手带您无忧上云