‘Equal’和’GetHashcode’方法存在于对象类中,我们的类型继承了对象基类.
直接实现对象的两个方法和使用IComparer接口有什么不同?
直接实现对象的两个方法和使用IComparer接口有什么不同?
如果我们重写对象的Equal和GetHashCode,并推送到哈希表,它将使用overring的相等方法?
什么是新的哈希表与IEqualityComparer构造函数的不同之处?
解决方法
当你需要能够“排序”对象时使用IComparable接口,它为你提供了一个方法(CompareTo),它告诉你两个对象是否是<,=或> .使用IEqualityComparer的构造函数允许您提供特定的Equals / GetHashCode,它可以与您的对象定义的不同.通常,Hashtable将使用您的对象重写Equals和GetHashCode(或基础对象Equals和GetHashCode).
举个例子,标准字符串以区分大小写的方式(“A”!=“a”)进行比较,但是你可以使IEqualityComparer助手类能够以不区分大小写的方式对字符串进行散列. (从技术上讲,这个类已经存在多种变体:它们被称为StringComparer.InvariantCultureIgnoreCase和StringComparer的所有其他静态方法,它们返回一个实现IComparer的StringComparer对象,IEqualityComparer,IComparer< string>,IEqualityComparer< string>)
作为注释,Hashtable使用IEqualityComparer可选参数,而不是通用版本IEqualityComparer< T>,因为Hashtable是预先泛型.