我可以为以下比较器逻辑编写哈希码函数吗?
如果 (A, B, C) 中的至少两个属性匹配,则 的两个实例My
相等。
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 清楚地说明了关于模糊比较器的一般有用性的一个非常重要的观点 - 请参阅他的答案以及全面了解这个问题/答案的基础。