以下代碼是否正常?基於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