我有一个类覆盖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
它会返回真的吗?如果不是,我应该如何测试这些列表是否相等?
答案 0 :(得分:2)
否 - List<T>
不会覆盖Equals
,因此默认使用引用相等。
一个可能的原因是集合的“平等”有不同的定义。订单有关系吗?复制品怎么样?
Linq提供了一种您可以轻松使用的SequenceEqual
方法,文档提供了它使用的标准:
[返回]
true
如果两个源序列长度相等且它们的对应元素根据其类型的默认相等比较器相等;否则,false
。
答案 1 :(得分:2)
使用
listA.SequenceEqual(listB);
它将调用该类型的默认相等比较器。我非常确定这意味着你必须为你的类提供equals()方法实现(而不是重载==运算符)。