什么是集合类型的默认相等比较器?

在没有参数的HashSet构造函数的MSDN API中,它声明了

初始化空的HashSet类的新实例,并使用集合类型的默认相等比较器。

什么是集合类型的默认相等比较器,例如自定义类?

BTW:它只是我或MSDN API文档在解释上真的有点薄吗? 在阅读时我不止一次地绊倒这些问题。

这意味着它将使用EqualityComparer.Default返回的比较器作为集合的元素类型T

正如文件所述:

Default属性检查类型T是否实现System.IEquatable接口,如果是,则返回使用该实现的EqualityComparer。 否则,它返回一个EqualityComparer,它使用由T提供的Object.Equals和Object.GetHashCode的覆盖。

因此,对于您的自定义类型,它将使用您定义的GetHashCode方法来查找集合中的项目。 如果你已经实现了IEquatable ,它将使用IEquatable.Equals(T)进行相等,否则它将使用你的Equals(object)方法。 此方法默认为object类中定义的引用相等性。 因此,如果使用任一方法定义相等性,则应确保也重写GetHashCode

默认情况下,它将委托给EqualityComparer.Default 。 这将返回一个比较器,可以比较两个类型为T对象。

对于自定义类,这按此顺序执行以下操作:

  • 如果该类实现IEquatable ,它将委托给该类的接口实现
  • 如果类定义了Equals方法,它将使用它
  • 作为最后的手段,它将使用引用相等