应该如何实现GetHashCode()?

时间:2011-10-01 14:36:28

标签: c# .net hashcode

  

可能重复:
  Create a hashcode of two numbers

我有以下课程:

public struct Test
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }

    public override int GetHashCode()
    {
        return Prop1.GetHashCode() ^ Prop2.GetHashCode();
    }
}

今天我发现我正在以错误的方式计算GetHashCode - 如果两个属性都相同,它总是返回0.如何以正确的方式执行?

1 个答案:

答案 0 :(得分:4)

没有一种正确的方法可以实现GetHashCode。由于您的属性是字符串,因此可能存在无限数量的值组合。哈希码是Int32,因此只有2 ^ 32个可能的值。因此,HashCode对于Prop1&的每个可能值都不是唯一的。 PROP2。您已经发现了值重复的一个点,即Prop1 = Prop2的位置。哈希码的想法是根据您期望的数据得到相当均匀的值分布。如果你在执行过程中将prop1和prop2与rarley相等,则可能不是问题。但是,如果您希望prop1和prop2在大多数情况下都相等,那么您应该对哈希码使用不同的算法。