我有以下课程:
public struct Test
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public override int GetHashCode()
{
return Prop1.GetHashCode() ^ Prop2.GetHashCode();
}
}
今天我发现我正在以错误的方式计算GetHashCode - 如果两个属性都相同,它总是返回0.如何以正确的方式执行?
答案 0 :(得分:4)
没有一种正确的方法可以实现GetHashCode。由于您的属性是字符串,因此可能存在无限数量的值组合。哈希码是Int32,因此只有2 ^ 32个可能的值。因此,HashCode对于Prop1&的每个可能值都不是唯一的。 PROP2。您已经发现了值重复的一个点,即Prop1 = Prop2的位置。哈希码的想法是根据您期望的数据得到相当均匀的值分布。如果你在执行过程中将prop1和prop2与rarley相等,则可能不是问题。但是,如果您希望prop1和prop2在大多数情况下都相等,那么您应该对哈希码使用不同的算法。