我正在尝试为已覆盖 Equals 的对象实现 GetHashCode。
public override bool Equals(object obj)
{
var myobject = obj as MyObject;
if (myobject == null)
return false;
if (myobject.SomeProperty == null || SomeProperty == null)
return false;
// All default SomeProperty's are equal
if (myobject.SomeProperty.IsDefault)
return SomeProperty.IsDefault;
// Otherwise equality is based on ID
return myobject.SomeProperty.ID == SomeProperty.ID;
}
public override int GetHashCode()
{
if (SomeProperty != null && SomeProperty.IsDefault)
return 0;
else return base.GetHashCode();
}
这是一种合理的方法吗,还是可能导致与 base.GetHashCode() 发生冲突?
编辑:我很欣赏迄今为止给出的解决方案,但同样的问题仍然存在。如果我没有实现完整的 GetHashCode 并依赖于其他一些实现,无论是 base.GetHashCode() 还是 Guid.GetHashCode(),是否有可能与硬编码的 0 值发生哈希码冲突?如果是这样,有没有一种简单的方法可以避免它?