You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断两个包含自定义Person对象的List是否相等?

判断两个包含自定义Person对象的List是否相等

你的代码里直接用list1 == list2会得到false,因为List<T>默认的==运算符是比较引用地址——list1和list2是两个独立创建的List实例,内存地址不同,所以直接判断肯定不相等。

要判断两个List的内容是否相等,需要同时满足两个条件:

  • 两个List的元素数量完全一致
  • 对应位置的每个Person对象的属性值都完全匹配

下面提供两种可行的实现方式:

方法一:重写Person类的Equals和GetHashCode方法

通过重写自定义类的相等判断逻辑,让SequenceEqual方法能正确比较对象属性:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public Person(string name, int age)
    {
        this.Name = name;
        this.Age = age;
    }

    // 自定义对象相等判断逻辑
    public override bool Equals(object obj)
    {
        if (obj is not Person otherPerson)
            return false;
        return Name == otherPerson.Name && Age == otherPerson.Age;
    }

    // 必须和Equals逻辑保持一致,用于哈希相关操作
    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Age);
    }
}

之后用SequenceEqual方法比较两个List:

bool listsEqual = list1.SequenceEqual(list2);
Debug.WriteLine("Lists are equal: " + listsEqual); // 输出true

SequenceEqual会逐个比对两个序列的元素,每个元素的比较会调用我们重写的Equals方法,从而判断属性是否一致。

方法二:使用自定义比较器(不修改Person类)

如果不想修改Person类,可以实现IEqualityComparer<Person>接口,作为比较规则传入SequenceEqual的重载方法:

public class PersonEqualityComparer : IEqualityComparer<Person>
{
    public bool Equals(Person x, Person y)
    {
        if (x == null && y == null) return true;
        if (x == null || y == null) return false;
        return x.Name == y.Name && x.Age == y.Age;
    }

    public int GetHashCode(Person obj)
    {
        return obj == null ? 0 : HashCode.Combine(obj.Name, obj.Age);
    }
}

调用方式:

bool listsEqual = list1.SequenceEqual(list2, new PersonEqualityComparer());
Debug.WriteLine("Lists are equal: " + listsEqual); // 输出true

补充:不考虑元素顺序的情况

如果不需要严格匹配元素顺序,只需要判断两个List包含的属性相同的Person对象完全一致(包含重复元素的数量也要匹配),可以用以下方式:

bool listsEqualUnordered = list1.Count == list2.Count 
                           && list1.All(p => list2.Count(p2 => p.Equals(p)) == list1.Count(p2 => p2.Equals(p)));

内容的提问来源于stack exchange,提问作者DmO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:35:15