在MSDN的这个页面上,他们描述了类的SequenceEqual
方法Enumerable
。
它在页面的中途说:
如果你想比较序列中对象的实际数据而不是仅仅比较它们的引用,你必须在你的类中实现 IEqualityComparer 通用接口。以下代码示例展示了如何在自定义数据类型中实现此接口并提供 GetHashCode 和 Equals 方法。
然后他们展示了一个示例,他们根本不实现IEqualityComparer<T>
接口,而是实现IEquatable<T>
. 我自己完成了测试,没有实现 IEqualityComparer 或 IEquatable,只是简单地覆盖了 Object 的 Equals,我发现它可以解决问题。这是示例:
class AlwaysEquals
{
override public bool Equals(Object o)
{
return true;
}
public override int GetHashCode()
{
return 1;
}
}
请注意,我的类 AlwaysEquals 什么都没有实现,没有 IEquatable,没有 IEqualityComparer,什么都没有。但是,当我运行此代码时:
AlwaysEquals ae1 = new AlwaysEquals();
AlwaysEquals ae2 = new AlwaysEquals();
AlwaysEquals ae3 = new AlwaysEquals();
AlwaysEquals[] Ae1 = new AlwaysEquals[] {ae3, ae2, ae3};
AlwaysEquals[] Ae2 = new AlwaysEquals[] {ae1, ae1, ae1};
Console.WriteLine(Ae1.SequenceEqual(Ae2));
..我得到了True
,而不是False
像阅读文档所期望的那样。这实际上是如何工作的?