我有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)
你需要覆盖Equal并GetHashCode在你的课堂上.像这样的东西:
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)