为什么" 397"用于ReSharper GetHashCode覆盖?

时间:2020-03-06 14:26:28  来源:igfitidea点击:

像你们中的许多人一样,我使用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质数以外,是否还有一些"特殊"的质数?

解决方案

Ben是正确的,反映出Assembly,我们可以看到这只是他们选择使用的质数。

可能是因为397是足够大的素数,导致结果变量溢出并在某种程度上混合了哈希的位,从而提供了更好的哈希码分布。 397并没有什么特别之处可以将其与相同大小的其他素数区分开。