考虑:EqualityComparer.Default属性,用MSDN编写:
Default属性检查类型T是否实现了 System.IEquatable接口,如果是,则返回一个 使用该实现的EqualityComparer。否则,它 返回使用覆盖的EqualityComparer 由T。
提供的Object.Equals和Object.GetHashCode
我的理解: 因为它将返回EqualityComparer“object”,所以它应该调用由T提供的Object.Equals和Object.GetHashCode的覆盖(如果它覆盖或者Object.Equals和Object.GetHashCode,否则)。 怎么能调用IEquatable的实现方法?是强行做吗?如果是的话,怎么样?如果我错了,请纠正我。
以下是MSDN链接:http://msdn.microsoft.com/en-us/library/ms224763.aspx
答案 0 :(得分:0)
首先,在如下的泛型类中,实际上会选择正确的方法(IEquatable<T>
):
private class MyEqualityComparer<T> : IEqualityComparer<T> where T : IEquatable<T>
{
public bool Equals(T x, T y)
{
return x.Equals(y);
}
// Hashcode...
}
如果您将y转换为object
,则引用将为object.Equals
。这只是一个重载方法,因此在编译时解决。