重写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

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

重写C#等于运算符是否也适用于测试列表相等性

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

一个可能的原因是对集合的"相等"有不同的定义。秩序重要吗?重复的呢?

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

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

使用

listA.SequenceEqual(listB);

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