我有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();
答案 0 :(得分:5)
您需要在课程中覆盖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();
}
}
或者使用更新版本的C#,您可以:
public override int GetHashCode() => $"{Id}|{Name}|{Age}".GetHashCode();