重写C#等于运算符是否也适用于测试列表相等性
本文关键字:测试 列表 适用于 是否 运算符 重写 | 更新日期: 2023-09-27 18:04:00
我有一个类,它覆盖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
它会变成真的吗?如果不是,我应该如何测试这些列表是否相等?
否-List<T>
不会覆盖Equals
,因此默认情况下使用引用相等。
一个可能的原因是对集合的"相等"有不同的定义。秩序重要吗?重复的呢?
Linq提供了一个可以轻松使用的SequenceEqual
方法,文档提供了它使用的标准:
[返回]如果两个源序列的长度相等,并且根据其类型的默认相等比较器,它们对应的元素相等,则返回
true
;否则为false
。
使用
listA.SequenceEqual(listB);
它将调用该类型的默认相等比较器。我确信这意味着您必须为类提供equals((方法实现(而不是重载==运算符(。