.net中自带的比较器Compare是值类型比较,要想比较对象,即引用类型.我们需要重写比较器.
新建RefComparer.cs类
创建一个委托,用于传入需要比较的对象
public delegate bool EqualsComparer<T>(T x, T y);
然后重写Equals和GetHashCode方法即可
具体代码如下
public delegate bool EqualsComparer<T>(T x, T y);
/// <summary>
/// 引用类型比较器
/// </summary>
/// <typeparam name="T"></typeparam>
public class RefComparer<T> : IEqualityComparer<T>
{
private EqualsComparer<T> comparer;
public RefComparer(EqualsComparer<T> equalsComparer)
{
this.comparer = equalsComparer;
}
public bool Equals(T x, T y)
{
if (this.comparer != null)
return this.comparer(x, y);
else
return false;
}
public int GetHashCode(T obj)
{
return obj.ToString().GetHashCode();
}
}