【问题标题】:How should one implement GetHashCode()? [duplicate]应该如何实现 GetHashCode()? [复制]
【发布时间】:2023-03-24 23:09:01
【问题描述】:

可能重复:
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。如何正确执行?

【问题讨论】:

  • 我不认为这是一个骗局 - 一个就是为 2d 点空间创建一个散列。这是关于创建具有多个字符串属性的类的哈希。
  • 是的,就是这样。问题可以结束了。
  • 好的——那个更好。同意。
  • 另一个建议 - 以 Resharper 的方式去做:stackoverflow.com/questions/102742/…

标签: c# .net hashcode


【解决方案1】:

没有一种正确的方法来实现 GetHashCode。由于您的属性是字符串,因此有无数种可能的值组合。哈希码是 Int32,所以只有 2^32 个可能的值。因此,对于 Prop1 和 Prop2 的每个可能值,HashCode 不可能是唯一的。您已经发现了一个值重复的点,即 Prop1 = Prop2。哈希码的想法是,您可以根据您期望的数据获得相当均匀的值分布。如果您希望 prop1 和 prop2 在执行期间 rarley 相等,那么它可能不是问题。但是,如果您希望 prop1 和 prop2 大部分时间都相等,那么您可能应该对哈希码使用不同的算法。

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 2016-04-21
    相关资源
    最近更新 更多