考虑: EqualityComparer.Default 属性,它在 MSDN 中写道:
Default 属性检查类型 T 是否实现了 System.IEquatable 接口,如果是,则返回使用该实现的 EqualityComparer。否则,它返回一个使用 T 提供的 Object.Equals 和 Object.GetHashCode 覆盖的 EqualityComparer。
我的理解:因为它会返回 EqualityComparer“对象”,所以它应该调用 T 提供的 Object.Equals 和 Object.GetHashCode 的覆盖(如果它覆盖或 Object.Equals 和 Object.GetHashCode,否则)。它怎么会调用 IEquatable 的实现方法呢?是强行做吗?如果是,如何?如果我错了,请纠正我。
这是 MSDN 链接:http: //msdn.microsoft.com/en-us/library/ms224763.aspx