public class Test
{
public int Value { get; set; }
public string String1 { get; set; }
public string String2 { get; set; }
public override int GetHashCode()
{
return Value ^ String1.GetHashCode() ^ String2.GetHashCode();
}
public override bool Equals( object obj )
{
return GetHashCode() == obj.GetHashCode();
}
}
为了测试目的,我创建了两个对象:
Test t = new Test()
{
Value = 1,
String1 ="One",
String2 = "One"
};
Test t2 = new Test()
{
Value = 1,
String1 = "Two",
String2 = "Two"
};
bool areEqual = t.Equals( t2 );
在测试中,即使两个对象不同,areEqual也返回true。我意识到这是因为String1和String2在每个对象中的值相同,当进行哈希时会互相抵消。
是否有更好的哈希方法可以解决我的问题?
SafeGetHashCode
的问题 - 只是提一下,EqualityComparer<T>.GetHashCode
做的事情非常相似 - 不过这个扩展方法还是挺整洁的,哈哈 ;p - Marc Gravell