2009-08-21 56 views
0

假設我有一個名爲myclass的類。哈希集合和所有成員完全相同的類的不同實例

在我的代碼中,我有兩個myclass,myclass1和myclass2的實例。 有關他們的一切是(公共和私人)屬性是相同的。

如果我嘗試將它們都添加到HashSet中,它會添加兩個還是隻添加一個? 如果它添加並且我不想要它,我可以在myclass定義中使用overidde equals,並且HasSet將知道如何使用它?

回答

2

簡短的回答,它取決於你的對象的等於方法。

較長的答案:

HashSet的將使用的IEqualityComparer確定兩個對象是相等的。如果你不提供一個,它將使用EqualityComparer.Default;它實際上只是使用object.Equals(a,b)加上一些東西來避免裝箱值類型。

檢查文檔是否爲object.Equals(a, b):檢查空值後,實際上僅執行a.Equals(b)

object.Equals(other)的默認實現是僅檢查引用是否相等(即它們是完全相同的對象實例),但您可以覆蓋此選項以執行任何您喜歡的檢查,例如檢查ID字段是否相同。請注意,當重寫Equals時,您還必須重寫GetHashCode。

如果您想更改HashSet如何確定相等性而不更改對象的定義,則可以爲其提供一個自定義IEqualityComparer。

相關問題