160

多くの皆さんと同じように、私は 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の素数について「特別な」何かがあるのでしょうか?
4

2 に答える 2

175

おそらく、397 は結果変数をオーバーフローさせてハッシュのビットをいくらか混ぜ合わせるのに十分なサイズの素数であり、ハッシュ コードのより良い分散を提供するためです。397 について、同じ大きさの他の素数と区別する特別な点は何もありません。

于 2008-09-19T15:29:24.073 に答える