使用Except比较2 List

Ill*_*lep 0 .net c# linq

我有2个List<Animal>我想比较并找到2个List<Animal>对象之间的区别.

Animal object包含以下属性.

ID

名称

年龄

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

当我使用该Except函数时,我希望remainingList它只包含2列表中不常见的对象.但是,remainingList包含一个副本list1.

我怎么解决这个问题?

 List<Animal> remainingList = list1.Except(list2).toListAsync();
Run Code Online (Sandbox Code Playgroud)

Sal*_*ari 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public override int GetHashCode() => $"{Id}|{Name}|{Age}".GetHashCode();
Run Code Online (Sandbox Code Playgroud)