📅  最后修改于: 2023-12-03 14:39:43.596000             🧑  作者: Mango
在C#中,List是一种常见的数据结构,用于存储一系列元素。List.Except方法允许我们从一个List中删除另一个List中的元素。但是,List.Except默认使用元素的默认比较方法,如果我们需要自定义比较方法,就需要使用IEqualityComparer接口来实现。
IEqualityComparer接口定义了用于比较两个对象是否相等的方法。它有两个方法:
bool Equals(T x, T y);
int GetHashCode(T obj);
Equals方法比较两个对象是否相等,返回一个boolean值。GetHashCode方法返回一个用于对象哈希化的32位有符号整数。
以下是一个使用IEqualityComparer自定义比较方法的示例。
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
}
public class StudentNameEqualityComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
return x.Name == y.Name;
}
public int GetHashCode(Student obj)
{
return obj.Name.GetHashCode();
}
}
上面代码定义了一个Student类和一个StudentNameEqualityComparer类,StudentNameEqualityComparer实现了IEqualityComparer
现在我们有两个学生列表:
List<Student> students1 = new List<Student>
{
new Student { ID = 1, Name = "John" },
new Student { ID = 2, Name = "Mary" },
new Student { ID = 3, Name = "Peter" }
};
List<Student> students2 = new List<Student>
{
new Student { ID = 4, Name = "Mary" },
new Student { ID = 5, Name = "Tom" },
new Student { ID = 6, Name = "Helen" }
};
现在我们可以使用List.Except方法来计算差异:
var differentStudents = students1.Except(students2, new StudentNameEqualityComparer());
以上代码计算了students1列表中所有不在students2列表中的Student对象,使用StudentNameEqualityComparer来比较两个Student对象。
C#中的List.Except方法允许我们从一个List中删除另一个List中的元素,但是默认使用元素的默认比较方法。如果我们需要自定义比较方法,就需要使用IEqualityComparer接口来实现。在使用List.Except方法时,我们可以指定自定义的比较方法。