应该如何实现GetHashCode()

本文关键字:GetHashCode 实现 何实现 | 更新日期: 2023-09-27 18:10:24

可能重复:
创建两个数字的哈希代码

我有以下课程:

public struct Test
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
    public override int GetHashCode()
    {
        return Prop1.GetHashCode() ^ Prop2.GetHashCode();
    }
}

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

应该如何实现GetHashCode()

实现GetHashCode没有唯一正确的方法。由于您的属性是字符串,因此存在大量可能的值组合。哈希代码是Int32,因此只有2^32个可能的值。因此,对于Prop1&Prop2。您发现了一个值重复的点,即Prop1=Prop2。哈希代码的思想是,您可以根据期望的数据获得相当均匀的值分布。如果您预计在执行过程中prop1和prop2对rarley是相等的,那么这可能不是问题。然而,如果您希望prop1和prop2在大多数情况下相等,那么您可能应该为哈希代码使用不同的算法。