以下代码是否正常?基于GetHashCode的Equals是否有负面影响?
public override bool Equals(object obj)
{
if (obj == null || !(obj is LicenseType))
return false;
return GetHashCode() == obj.GetHashCode();
}
public override int GetHashCode()
{
return
Vendor.GetHashCode()^
Version.GetHashCode()^
Modifiers.GetHashCode()^
Locale.GetHashCode();
}
所有属性是枚举/数字字段,并且是定义LicenseType
对象的唯一特性。
即使取决于哈希码是好的,您的GetHashCode的实现并不好,你应该看看http://stackoverflow.com/a/720282/267 – 2015-03-03 11:01:40
这不是一个特别合理的哈希代码实现:http ://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/ – 2015-03-03 11:04:07
的GetHashCode用作干什么的正式成员,由成员平等比较之前快速检查。一个好的hashcode实现很重要,因为像Dictionary这样的集合使用它来创建桶。字典将使用密钥的哈希码来定位合适的桶,然后使用相等来查找完全匹配。 – 2015-03-03 11:26:16