我試圖找出C#如何比較HashSet中的對象是否相等。C# - 無法找到確認的答案散列集包含比較檢查
我找不到任何東西在這裏:當我來到計算器http://msdn.microsoft.com/en-us/library/bb359438.aspx
只是,我看它使用的equals()和也許 GetHashCode()方法
我正打算實現這兩個方法無論如何,但我的問題是:
你會怎麼做才能找出如何HashSet實際上比較對象?
我試圖找出C#如何比較HashSet中的對象是否相等。C# - 無法找到確認的答案散列集包含比較檢查
我找不到任何東西在這裏:當我來到計算器http://msdn.microsoft.com/en-us/library/bb359438.aspx
只是,我看它使用的equals()和也許 GetHashCode()方法
我正打算實現這兩個方法無論如何,但我的問題是:
你會怎麼做才能找出如何HashSet實際上比較對象?
它使用Equals
比較對象的相等性。它確定使用GetHashCode
將它們放入哪個存儲桶。
更一般地說,HashSet使用傳遞給它的構造函數的IEqualityComparer<T>
來執行這兩個操作。如果沒有指定,則它使用EqualityComparer<T>.Default
,它調用對象的GetHashCode()
和IEquatable<T>.Equals()
方法(或object.Equals()
,如果該類型不執行IEquatable<T>
)。
值得一讀:http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx – 2011-06-09 15:57:20
我發現文檔有點混亂,所以我寫了一個簡單的控制檯應用程序與類Equals和GetHashCode覆蓋的各種組合和/或IEquality實現,並在每個實現中使用簡單的調試語句。然後,我將這些對象的集合添加到HashSet中,並查看調試輸出以確定HashSet正確工作的最低要求。它有助於理清MS文檔的意圖。我也運行測試,我的類從IEquatable基類或接口繼承。 –
mdisibio
2011-06-09 16:48:40