【发布时间】:2012-10-17 21:21:10
【问题描述】:
我找到了一个看起来像这样的 GetHashCode() 实现
Guid _hashCode = Guid.NewGuid();
public override int GetHashCode()
{
return _hashCode.GetHashCode();
}
即使认为 Equals 看起来是正确的,说这种实现会导致许多关于 .NET 的假设被打破是否正确?
public override bool Equals(object obj)
{
if (obj.GetType() != trustedEntity.GetType())
return false;
TrustedEntity typedObj = (TrustedEntity)obj;
if (trustedEntity.BackTrustLink != typedObj.BackTrustLink)
return false;
if (trustedEntity.ForwardTrustLink != typedObj.ForwardTrustLink)
return false;
if (trustedEntity.EntryName != typedObj.EntryName)
return false;
return true;
}
我听到的反驳论点是,一旦创建对象,GetHashCode 就不需要更改。这是因为此对象存储在字典中。
有人可以为我澄清一下,并解释如果对象发生更改,GetHashCode 需要发生什么,最终会更改 Equals 方法吗?
【问题讨论】:
-
您尚未显示您的
Equals。虽然两者都相关,但Equals和GetHashCode并不相同。你的Equals和这个Guid比较吗?
标签: c# dictionary equals gethashcode iequatable