Visual Studio独自のリファクタリングメニューを使用して、次のようにGetHashCode実装をクラスに追加する場合:
クラスで唯一のintプロパティを選択します。
.NET Frameworkでこのコードを生成します。
public override int GetHashCode()
{
return -1937169414 + Value.GetHashCode();
}
(HashCode.Combine(Value)
代わりに.NET Core で生成されますが、同じ値が含まれるかどうかはわかりません)
この値の特別な点は何ですか?Visual StudioがValue.GetHashCode()
直接使用しないのはなぜですか?私が理解しているように、それは実際にはハッシュ配布に影響を与えません。これは単なる加算なので、連続する値は引き続き一緒に蓄積されます。
編集:私はこれをValue
プロパティを持つ異なるクラスでのみ試しましたが、明らかにプロパティ名は生成される数に影響します。たとえば、プロパティの名前をに変更するHalue
と、番号は387336856になります。これを指摘してくれたGökhanKurtに感謝します。
int
です。
-1937169414
-1521134295
およびの整数乗算です-783812246
。ここでより重要な数は-1521134295
、すべてのハッシュコード計算で表示されます。-783812246
シード番号です。シード番号は、方程式のメンバー数に基づいて選択されます。匿名クラスでは、シード番号はフィールド名に基づいて計算されます。したがって、整数の数と同じ数のシード番号があります。シード番号はランダムであると想定できます。の重要性については-1521134295
、衝突を減らし、内部の開発者だけがどのように正確に答えることができると思います。