まず、ここでGetHashCode説明するアルゴリズムを使用しています。ここで、次の(考案された)例を想像してください。
class Foo
{
public Foo(int intValue, double doubleValue)
{
this.IntValue = intValue;
this.DoubleValue = doubleValue;
}
public int IntValue { get; private set; }
public double DoubleValue { get; private set; }
public override int GetHashCode()
{
unchecked
{
int hash = 17;
hash = hash * 23 + IntValue.GetHashCode();
hash = hash * 23 + DoubleValue.GetHashCode();
return hash;
}
}
}
class DerivedFoo : Foo
{
public DerivedFoo(int intValue, double doubleValue)
: base(intValue, doubleValue)
{
}
}
各プロパティに同じ値のaFooとaがある場合DerivedFoo、それらは同じハッシュコードを持ちます。HashSet<Foo>つまり、Linqでこのメソッドを使用することも、使用することもできDistinct、2つのインスタンスは同じものとして扱われます。
私はおそらくの使用法を誤解しているだけですGetHashCodeが、これら2つのインスタンスは異なるハッシュコードを持っていると思います。これは無効な期待GetHashCodeですか、それとも計算でタイプを使用する必要がありますか?(またはDerivedClassオーバーライドする必要がありますGetHashCode)?
PSこのトピックに関連して、SOに関する質問がたくさんあることはわかっていますが、この質問に直接答える質問は見つかりませんでした。