[英]What is the default equality comparer for a set type?
在HashSet
構造函數的 MSDN API 中,它聲明了沒有參數
初始化 HashSet 類的一個新實例,該實例為空並使用集合類型的默認相等比較器。
集合類型(例如自定義類)的默認相等比較器是什么?
順便說一句:只是我還是 MSDN API 文檔的解釋真的有點少? 我在閱讀它時不止一次偶然發現這些問題。
這意味着它將使用EqualityComparer<T>.Default
返回的比較器作為集合的元素類型T
正如文檔所述:
Default 屬性檢查類型
T
是否實現 System.IEquatable 接口,如果是,則返回使用該實現的 EqualityComparer。 否則,它返回一個 EqualityComparer,它使用T
提供的 Object.Equals 和 Object.GetHashCode 的覆蓋。
因此,對於您的自定義類型,它將使用您定義的GetHashCode
方法來定位集合中的項目。 如果您實現了IEquatable<T>
,它將使用IEquatable<T>.Equals(T)
來表示相等,否則它將使用您的Equals(object)
方法。 此方法默認引用object
類中定義的相等性。 因此,如果您使用任一方法定義相等,則應確保還覆蓋GetHashCode
。
默認情況下,它將委托給EqualityComparer<T>.Default
。 這將返回一個可以比較兩個T
類型對象的比較器。
對於自定義類,它按以下順序執行一些操作:
IEquatable<T>
,它將委托給該類的此接口的實現Equals
方法,它將使用該方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.