什么是集合类型的默认相等比较器?
在没有参数的HashSet
构造函数的MSDN API中,它声明了
初始化空的HashSet类的新实例,并使用集合类型的默认相等比较器。
什么是集合类型的默认相等比较器,例如自定义类?
BTW:它只是我或MSDN API文档在解释上真的有点薄吗? 在阅读时我不止一次地绊倒这些问题。
这意味着它将使用EqualityComparer
返回的比较器作为集合的元素类型T
正如文件所述:
Default属性检查类型T是否实现System.IEquatable接口,如果是,则返回使用该实现的EqualityComparer。 否则,它返回一个EqualityComparer,它使用由T提供的Object.Equals和Object.GetHashCode的覆盖。
因此,对于您的自定义类型,它将使用您定义的GetHashCode
方法来查找集合中的项目。 如果你已经实现了IEquatable
,它将使用IEquatable
进行相等,否则它将使用你的Equals(object)
方法。 此方法默认为object
类中定义的引用相等性。 因此,如果使用任一方法定义相等性,则应确保也重写GetHashCode
。
默认情况下,它将委托给EqualityComparer
。 这将返回一个比较器,可以比较两个类型为T
对象。
对于自定义类,这按此顺序执行以下操作:
- 如果该类实现
IEquatable
,它将委托给该类的接口实现 - 如果类定义了
Equals
方法,它将使用它 - 作为最后的手段,它将使用引用相等