GetHashCode
的返回值被保證是用於僅在應用程序的執行相同的相同對象的相同;如果您在應用程序執行之間存儲散列碼,則不能保證可靠。有關更多信息,請參閱MSDN文檔System.Object.GetHashCode()(「如果應用程序再次運行,可以通過[GetHashCode]返回不同的哈希碼。」)。事實上,截至2016年3月,現在已經記錄了不同進程和不同應用程序域(甚至在同一進程內)之間可能存在差異的哈希代碼,請參閱GetHashCode文檔中的警告框。
絕對不應該使用GetHashCode的返回值來確定對象的相等性。調用Equals也是必要的。
有關實現GetHashCode的指導,請參閱文檔的繼承者說明。
上的GetHashCode的默認實現:
GetHashCode方法的默認實現不執行對不同的對象不 保證唯一的返回值。此外,.NET Framework不保證 GetHashCode方法的默認實現,並且它返回的值將在 不同版本的.NET Framework之間相同。因此,不得將此方法的默認實現用作散列目的的唯一對象 標識符。
(請注意,這是不同的,例如,Java的默認實現hashCode()
,這是記錄在案,以嘗試返回不同的對象不同的值「儘可能合理實用」。)
如果您需要更穩定的散列函數,因此,您必須使用自己的散列函數,更重要的是,記錄散列函數以確保其穩定性並確保用戶可以依賴其穩定性。
這裏有幾種選擇,如MurmurHash3,MD5等。這裏最重要的是記錄你正在使用的哈希函數。
謝謝,那麼,我的選擇是什麼? – abhinav
我的意思是,我該如何生成可靠的哈希碼?閱讀完編輯之後,我發現我根本不應該使用'GetHashCode()'。那麼,你回答了這個問題,但。謝謝!無論如何,如果您有任何關於哈希代碼生成的建議,我將不勝感激。 – abhinav
我編輯了我的答案。 –