2011-05-31 44 views
6

this例子中,海報已經重寫了get hash編碼方法。我知道這樣做是爲了爲返回的對象提供更好的散列值,以減少衝突次數,並因此減少需要調用Equals()的次數。C#重寫GetHashCode方法

我想知道什麼,是這個算法是如何計算出來的:

return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode(); 

是否存在有問題的數字是選擇了一個特別的原因?我可以簡單地選擇自己的號碼投入嗎?

+1

僅供參考,MS C#編譯器(用於匿名類型)使用種子「-1134271262」和乘數「-1521134295」。只是說' – 2011-05-31 10:48:22

+0

@MarcGravell:你有這個來源嗎? – DeepSpace101 2014-06-25 03:01:02

+0

@ DeepSpace101 ILDASM; p – 2014-06-25 06:50:50

回答

4

一般你應該選擇素數。這可以幫助您避免爲不同的輸入參數獲取相同的散列值。