定义
public class Person{
public string name {get;set;}
public int age {get;set;}
}
public class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
if (ReferenceEquals(x, y)) return true;
if (ReferenceEquals(x, null) || ReferenceEquals(y, null)) return false;
//此处修改需要对比的字段,当前表示使用age和name两个字段为去重条件,筛选List中age和name都相同的内容去重
return x.age == y.age && x.name == y.name ;
}
public int GetHashCode(Person obj)
{
//此处修改需要对比的字段,当前表示使用age和name两个字段为去重条件,筛选List中age和name都相同的内容去重
return obj.name.GetHashCode() ^ obj.age.GetHashCode() ;
}
}
调用
List<Person> people = new List<Person>
{
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Alice", 30) // 这个人的Name和Age与第一个相同,应该被视为重复
};
// 使用Distinct方法和自定义的IEqualityComparer<Person>进行去重
List<Person> distinctPeople = people.Distinct(new PersonComparer()).ToList();