考虑下面的类HashSet的复杂平等
public class X
{
//Unique per set/never null
public ulong A { get; set; }
//Unique per set/never null
public string B { get; set; }
//Combination of C and D is Unique per set/both never null
public string C { get; set; }
public string D { get; set; }
public override bool Equals(object obj)
{
var x = (X)obj;
if (A == x.A || B==x.B)
return true;
if (C+D==x.C+x.D)
return true;
return false;
}
public override int GetHashCode()
{
return 0;
}
}
我想不出写在上面的在性能评价的组合应用散列函数,就像在的Equals功能,在这种情况下,是我最好的选择,从GetHashCode
返回0还是我错过了什么?
在不同状态下返回零是非常糟糕的解决方案 – eocron
我无法理解如何在不完全验证“ A = A','B = B','C = C',和'D = D' ... –
@ eocron06真的很糟糕的是返回'GetHashCode'的改变值... ...一直返回0 LEA st满足物品在容器中时价值不应该改变的合同。事实上,它使HashSet操作O(n),但至少他们会产生正确的结果。 –