可能的重复:
为什么在 C# 中重写 Equals 方法时重写 GetHashCode 很重要? https://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c
我正在研究我的以下课程Object Model
并且无法理解添加的意义GetHashCode()
in the Class
.
样本班
public class SampleClass
{
public int ID { get; set; }
public String Name { get; set; }
public String SSN_Number { get; set; }
public override bool Equals(Object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
SampleClass cls = (SampleClass)obj;
return (ID == cls.ID) &&
(Name == cls.Name) &&
(SSN_Number == cls.SSN_Number);
}
public override int GetHashCode()
{
return ID.GetHashCode() ^ Name.GetHashCode() ^ SSN_Number.GetHashCode();
}
}
假设我有一个列表Sample Class
对象,我想获得一个特定的索引。然后Equals()
可以帮助我获得该记录。我为什么要使用GetHashCode()
?
您需要处理这两个问题,因为许多集合实现(例如 Dictionary)都使用 GetHashCode() 与 Equals 方法配合使用。重要的是,如果您重写 Equals 的实现,那么您必须以这样的方式重写 GetHashCode:根据您的新实现,任何两个 Equal 对象也必须返回相同的哈希码。
如果不这样做,那么它们将无法在词典中正常工作。一般来说,这并不难。我经常这样做的一种方法是获取用于相等的对象的属性,并将它们连接到一个 String 对象中,然后返回 String.GetHashCode。
String 有一个非常好的 GetHashCode 实现,它为各种值返回广泛的整数,从而在稀疏集合中实现良好的分布。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)