使用Except比较2个列表

时间:2018-10-10 11:02:20

标签: c# .net linq

我有2个List<Animal>,我想进行比较并找出2个List<Animal>对象之间的差异。

Animal对象包含以下属性。

  

Id

     

名称

     

年龄

列表list1中有10个Animal对象,其中list2中还有10个Animal对象。在这2个列表中,有2个项目(Animal对象相同)

当我使用Except函数时,我希望remainingList仅包含两个列表之间不常见的对象。但是,remainingList包含list1的副本。

我该如何解决?

 List<Animal> remainingList = list1.Except(list2).toListAsync();

1 个答案:

答案 0 :(得分:5)

您需要在课程中覆盖EqualGetHashCode。像这样:

public class Animal
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }

    public override bool Equals(object obj)
    {
        if (!(obj is Animal))
            return false;
        var p = (Animal)obj;
        return p.Id == Id && p.Name == Name && p.Age == Age;
    }

    public override int GetHashCode()
    {
        return String.Format("{0}|{1}|{2}", Id, Name, Age).GetHashCode();
    }
}

或者使用更新版本的C#,您可以:

public override int GetHashCode() => $"{Id}|{Name}|{Age}".GetHashCode();