Equals 和 GetHashCode
Equals
的每個實現都必須滿足以下要求:
-
反身 :一個物體必須與自己相等。
x.Equals(x)
返回true
。 -
對稱 :如果我將 x 與 y 或 y 與 x 進行比較沒有區別 - 結果是相同的。
x.Equals(y)
返回與y.Equals(x)
相同的值。 -
傳遞 :如果一個物件等於另一個物件而該物件等於第三個物件,則第一個物件必須等於第三個物件。
如果(x.Equals(y) && y.Equals(z))
返回true
,則x.Equals(z)
返回true
。 -
一致 :如果多次將物件與另一個物件進行比較,結果始終相同。
只要未修改 x 和 y 引用的物件,x.Equals(y)
的連續呼叫將返回相同的值。 -
與 null 的比較 :沒有物件等於
null
。
x.Equals(null)
返回false
。
GetHashCode
的實現:
-
與
Equals
相容 :如果兩個物件相等(意味著Equals
返回 true),則GetHashCode
必須為每個物件返回相同的值。 -
大範圍 :如果兩個物件不相等(
Equals
表示錯誤),則它們的雜湊碼很可能是不同的。由於可供選擇的數量有限,因此通常無法進行完美雜湊。 -
便宜 :在所有情況下計算雜湊碼應該很便宜。
請參閱: 過載等於()和運算子==的指南