0.2.比较接口Default 常见的3类比较接口 IStructuralEquatable IStructuralComparable

abstract class EqualityComparer:IEqualityComparer,IEqualityComparer

0
static volatitle EqualityComparer defaultComparer; public static EqualityComparer Default{get;} //调用CreateComparer()
//Default属性就返回了8种comparer
private static EqualityComparer<T> CreateComparer()
{
    //根据不同情况返回8种默认实现的comparer        
}
## 其他的额外方法
IndexOf()
LastIndexOf()

1.GenericEqualityComparer
2.NullableEqualityComparer
3.ObjectEqualityComparer
4.ByteEqualityComparer
5.EnumEqualityComparer
6.SByteEnumEqualityComparer
7.ShortEnumEqualityComparer
8.LongEnumEqualityComparer

abstract class Comparer:IComparer,IComparer

0
public static Comparer Default{get;} //使用CreateComparer()
CreateComparer产生4个不同的派生类,根据泛型

1. ComparisonComparer<T>
2. GenericComparer<T>
3. NullableComparer<T>
4. ObjectComparer<T>
0

我有比较的能力,我和其他instance比

int CompareTo(T other);

我是个比较器,所以我能比较任何两个instance

int Compare(T x,T y);

3.IEqualityComparer,IEqualityComparer 强调改变了equals也要改变gethashcode

bool Equals(T x,T y);
int GetHashCode(T obj);

IEquatable 强调是否相等

bool Equals(T other); 
两个对象是否相等

IStructuralEquatable

Boolean Equals(Object other,IEqualityComparer comparer);
int GetHashCode(IQualityComparer comparer);

IStructuralComparable

Int32 CompareTo(Object other, IComparer comparer);