[英]GetHashCode() dummy implementation if not needed
我已經閱讀了大量關於正確實現Equals()
和GetHashCode()
。 我有一些類有很多成員變量,我必須為它們實現Equals()
方法。 到現在為止還挺好。 然而,在實現GetHashCode()
我總是無法找到一個好的實現。 正如我所知,對於某些類,它們永遠不會在字典或哈希表中使用,我不想花時間編寫一個好的GetHashCode()
實現,所以我想出了以下虛擬“默認”實現:
public override int GetHashCode()
{
Debug.Fail( "If you see this message, implement GetHashCode() properly" );
// Always return the same value for all instances of this class. This ensures
// that two instances which are equal (in terms of their Equals() method)
// have the same hash code.
return 0;
}
我想征求您的意見,如果這是一種可行的方法。
一方面,我不想花時間在不需要的時候實現GetHashCode()
。 另一方面,我希望我的代碼干凈有效。 上述實現確保具有相同Equals()
結果的兩個實例也具有相同的哈希碼。 當然,如果真的要作為字典的key,性能會很差。 但是對於這種情況,您將獲得調試斷言。
上述方法是否有任何我可能錯過的缺點?
如果您真的不想實現它,我建議您改為NotImplementedException
異常(例如NotImplementedException
) - 那么您不僅僅依賴於Debug.Fail
工作。 如果您最終在生產環境中遇到這種情況,那么快速失敗可能是最好的選擇。
但老實說,一旦你實現了相等,通常很容易編寫GetHashCode
( 可能是這樣的代碼) - 如果這不容易,那么這通常表明你的Equals
方法無論如何都會違反其契約。
請注意, GetHashCode
不僅僅用於字典 - 如果您嘗試根據您的類型鍵在 LINQ 中連接兩個列表,則也將使用GetHashCode
。 基本上,不執行它違反了最小驚訝原則。 除非您是唯一使用您的代碼的人(並且您有完美的記憶力或願意在每次使用該類型時進行檢查),否則您應該正確實現它,IMO。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.