在没有参数的HashSet
构造函数的MSDN API中,它指出了
初始化一个空的HashSet类的新实例 对集合类型使用默认的相等比较器。
集合类型的默认相等比较器是什么,例如对于自定义类?
BTW:仅仅是我或MSDN API文档在解释上真的有点薄吗?我在阅读时不止一次地绊倒这些问题。
答案 0 :(得分:40)
这意味着它将使用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
。
答案 1 :(得分:4)
默认情况下,它会委托给EqualityComparer<T>.Default
。这将返回一个比较器,可以比较两个类型为T
的对象。
对于自定义类,按以下顺序执行以下操作:
IEquatable<T>
,它将委托给该类的接口实现Equals
方法,则会使用该</ li>