我找到了一个看起来像这样的 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 方法吗?