.NET 中重寫 Equals 時是否應重寫 GetHashCode?
在 .NET 中定義自定義類型時,如果需要,不僅要重寫 Equals 方法,還要重寫 GetHashCode 方法,這一點至關重要。當類型用作字典和哈希集等集合中的鍵時,這一點尤其重要。
為什麼重寫 GetHashCode?
GetHashCode 負責為對像生成哈希碼。在沒有自定義相等比較器的情況下,集合使用此哈希碼來確定在其中查找對象的適當存儲桶。如果兩個對象的哈希碼相同,則假定它們位於同一個存儲桶中,只有那時才會調用 Equals 來執行更詳盡的相等性檢查。
首選 GetHashCode 方法
考慮到提供的 Foo 類,其中重寫 Equals 以基於 FooId 屬性進行比較,GetHashCode 的首選實現是返回 FooId。這種方法與 Equals 邏輯一致,確保具有相同 FooId 的對象具有相同的哈希碼。
不正確重寫 GetHashCode 的後果
忽略重寫 GetHashCode,使用默認實現,會導致以下幾種不利影響:
其他注意事項
通過根據 Equals 實現重寫 GetHashCode,我們確保具有相同標識的對象具有相同的哈希碼,從而促進集合中高效且準確的存儲和檢索。
以上是當覆蓋在.net中時,您應該覆蓋Gethashcode嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!