覆盖C#equals运算符是否也可用于测试列表相等性?

时间:2015-07-22 19:13:27

标签: c# equality

我有一个类覆盖C#的==运算符,如此

public class Foo
{
    /*Variables and Constructors*/

    public static bool operator ==(Foo a, Foo b) 
    {
         /*Check values for equality*/
    }
}

这是否意味着如果我运行此表达式

List<Foo> listA == List<Foo> listB

它会返回真的吗?如果不是,我应该如何测试这些列表是否相等?

2 个答案:

答案 0 :(得分:2)

否 - List<T>不会覆盖Equals,因此默认使用引用相等。

一个可能的原因是集合的“平等”有不同的定义。订单有关系吗?复制品怎么样?

Linq提供了一种您可以轻松使用的SequenceEqual方法,文档提供了它使用的标准:

  

[返回] true如果两个源序列长度相等且它们的对应元素根据其类型的默认相等比较器相等;否则,false

答案 1 :(得分:2)

使用

listA.SequenceEqual(listB);

它将调用该类型的默认相等比较器。我非常确定这意味着你必须为你的类提供equals()方法实现(而不是重载==运算符)。