次の比較ロジックのハッシュコード関数を記述できますか?
My
(A、B、C)の少なくとも2つのプロパティが一致する場合、の2つのインスタンスは等しくなります。
Equalsの部分は単純ですが、ハッシュコードの部分に困惑していて、それが不可能かもしれないと思っている部分があります。
class MyOtherComparer : IEqualityComparer<My>
{
public bool Equals(My x, My y)
{
if (Object.ReferenceEquals(x, y))
return true;
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
int matches = 0;
if(x.A == y.A) matches++;
if(x.B == y.B) matches++;
if(x.C == y.C) matches++;
// match on two out of three
return (matches > 1)
}
// If Equals() returns true for a pair of objects
// then GetHashCode() must return the same value for these objects.
public int GetHashCode(My x)
{
// ???
}
}
更新:Reed Copseyによる正解に加えて、ファジー比較の一般的な有用性に関する非常に重要な点がEthan Brownによって明確に述べられています。この質問/回答の根底にあるものを完全に理解するには、彼の回答も参照してください。