2011-06-09 15 views
3

我試圖找出C#如何比較HashSet中的對象是否相等。C# - 無法找到確認的答案散列集包含比較檢查

我找不到任何東西在這裏:當我來到計算器http://msdn.microsoft.com/en-us/library/bb359438.aspx

只是,我看它使用的equals()和也許 GetHashCode()方法

我正打算實現這兩個方法無論如何,但我的問題是:

你會怎麼做才能找出如何HashSet實際上比較對象?

+1

值得一讀:http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx – 2011-06-09 15:57:20

+0

我發現文檔有點混亂,所以我寫了一個簡單的控制檯應用程序與類Equals和GetHashCode覆蓋的各種組合和/或IEquality 實現,並在每個實現中使用簡單的調試語句。然後,我將這些對象的集合添加到HashSet中,並查看調試輸出以確定HashSet正確工作的最低要求。它有助於理清MS文檔的意圖。我也運行測試,我的類從IEquatable基類或接口繼承。 – mdisibio 2011-06-09 16:48:40

回答

5

它使用Equals比較對象的相等性。它確定使用GetHashCode將它們放入哪個存儲桶。

更一般地說,HashSet使用傳遞給它的構造函數的IEqualityComparer<T>來執行這兩個操作。如果沒有指定,則它使用EqualityComparer<T>.Default,它調用對象的GetHashCode()IEquatable<T>.Equals()方法(或object.Equals(),如果該類型不執行IEquatable<T>)。

+0

謝謝。你是怎麼發現的? – rk2010 2011-06-09 15:49:13

+0

只需體驗散列表通常如何工作以及如何在.Net中使用IEqualityComparer 。我還使用反射器對其進行了驗證。 – Sven 2011-06-09 15:53:14

+0

反射器,嗯,誰會想到這樣做;) – MattC 2011-06-09 15:57:19

相關問題