ReSharper GetHashCode オーバーライドに「397」が使用されるのはなぜですか?
-
01-07-2019 - |
質問
皆さんの多くと同じように、私も開発プロセスをスピードアップするために 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 が十分なサイズの素数であるため、結果変数がオーバーフローしてハッシュのビットが多少混合され、ハッシュ コードの分散が向上します。397 には、同じ大きさの他の素数と区別する特別な点は何もありません。
所属していません StackOverflow