为什么“397”用于ReSharperGetHashCode重写?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

和你们中的许多人一样,我使用ReSharper来加速开发过程。当您使用它来覆盖类的相等成员时,它为GetHashCode()生成的代码生成如下所示:

    public override int GetHashCode()
    {
        unchecked
        {
            int result = (Key != null ? Key.GetHashCode() : 0);
            result = (result * 397) ^ (EditableProperty != null ? EditableProperty.GetHashCode() : 0);
            result = (result * 397) ^ ObjectId;
            return result;
        }
    }

当然,我有一些自己的成员,但我想知道的是为什么397?

提问于
用户回答回答于

可能是因为397是导致结果变量溢出并混合哈希位的足够大的主要因素,从而提供更好的哈希代码分布。397与其他相同数量的素数不同,没有什么特别的特殊之处。

用户回答回答于

你可以看到它只是他们选择使用的素数。

扫码关注云+社区