匿名クラスの実装をGetHashCode()
にすると、Roslynはプロパティ名に基づいて初期ハッシュ値を計算します。匿名クラスに対して生成されたGetHashCode()実装の初期ハッシュ値がプロパティ名に依存するのはなぜですか?
public override in GetHashCode()
{
int hash = 339055328;
hash = hash * -1521134295 + EqualityComparer<int>.Default.GetHashCode(Int);
hash = hash * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Text);
return hash;
}
しかし、我々は、プロパティ名、初期値の変更変更した場合::
をvar x = new { Int2 = 42, Text2 = "42" };
public override in GetHashCode()
{
int hash = 605502342;
hash = hash * -1521134295 + EqualityComparer<int>.Default.GetHashCode(Int2);
hash = hash * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Text2);
return hash;
}
例えば、
var x = new { Int = 42, Text = "42" };
のために生成されたクラスは、次のGetHashCode()
の方法を持っているとしていますこの行動の背後にある理由は何ですか?大きな[素数]の番号を選んでそれをすべての匿名クラスに使用するだけで問題はありますか?
異なるタイプのオブジェクトが「より」異なるように異なる定数を使用すると、私にとってはもっと役に立つようです。 – usr