在HashSet没有参数的构造函数的MSDN API中,它指出
初始化一个空的HashSet类的新实例,并使用集合类型的默认相等比较器.
什么是集合类型的默认相等比较器,例如自定义类?
BTW:它只是我或MSDN API文档在解释上真的有点薄吗?我在阅读时不止一次地绊倒这些问题.
Lee*_*Lee 42
这意味着它将使用返回的比较器作为集合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定义的方法,它将使用该方法