簡體   English   中英

集合類型的默認相等比較器是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM