2009-01-14 49 views
4

重複What is the best algorithm for an overridden System.Object.GetHashCode?你如何在對象上實現GetHashCode()?


如果你寫的各種數據成員的一個對象,你如何聰明地實現GetHashCode()方法?

一位開發者告訴我他只是異或(^運算符)相關數據字段的散列,但我不相信這是一個「最佳實踐」的實現。

如果我有我的方式,將有函數Object.CombineHashes(Object [])和/或Object.CombineHashes(int [])來幫助智能地構建複雜對象的散列。

你會如何編寫這些功能?

+0

很好找,@Gortok。我投票結束。 – 2009-01-14 01:16:29

回答

1

我做了一個快速和骯髒的實施一堆成員通過與管道串聯它們,然後得到的該hascode:

(Member1.ToString() + "|" + Member2.ToString()).GetHasCode(); 

在我的情況,我知道,我永遠不會有管道在成員中,所以我知道結果會很好。

其實,在我來說,我實現的ToString爲了調試的目的,所以我只是使用了:

this.ToString().GetHashCode(); 

XOR的是另一種方法,我經常看到。

+4

此方法具有嚴重的性能影響。考慮GetHashCode在哪裏使用,這看起來很有效,但是不明智。 – abelenky 2009-01-14 01:54:37