📅  最后修改于: 2023-12-03 15:02:41.532000             🧑  作者: Mango
LINQ(Language Integrated Query,语言集成查询)提供了许多操作符,其中之一是“除了(Except)”操作符。本文将介绍如何使用“除了”操作符,并提供一些示例代码。
“除了”操作符用于从第一个集合中删除在第二个集合中出现的所有元素。以下是“除了”操作符的语法:
public static IEnumerable<TSource> Except<TSource> (this IEnumerable<TSource> first, IEnumerable<TSource> second);
其中,第一个参数是要从中排除元素的集合,第二个参数是要排除的集合。
假设我们有两个整数集合:
int[] numbers1 = { 1, 2, 3, 4, 5 };
int[] numbers2 = { 3, 4, 5, 6, 7 };
我们想从第一个集合中排除在第二个集合中出现的元素。我们可以使用“除了”操作符来完成此操作:
var result = numbers1.Except(numbers2);
结果将是一个包含1和2的新集合。
默认情况下,“除了”操作符检查集合中的元素是否相等。但是,您可以提供自定义比较器,以便更精确地控制元素匹配的方式。以下是一个示例,其中使用自定义比较器来比较Person对象:
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) {
return x.Name == y.Name && x.Age == y.Age;
}
public int GetHashCode(Person obj) {
return obj.Name.GetHashCode() ^ obj.Age.GetHashCode();
}
}
Person[] people1 = {
new Person { Name = "Alice", Age = 18 },
new Person { Name = "Bob", Age = 22 },
new Person { Name = "Charlie", Age = 30 }
};
Person[] people2 = {
new Person { Name = "Charlie", Age = 30 },
new Person { Name = "Dave", Age = 40 }
};
var result = people1.Except(people2, new PersonComparer());
在上面的示例中,我们创建了一个自定义比较器PersonComparer,并将其传递给“除了”操作符。这将导致Person对象的Name和Age属性被用于比较两个集合中的元素。
“除了”操作符用于从第一个集合中删除在第二个集合中出现的所有元素。您可以使用默认比较器或提供自定义比较器来控制元素匹配的方式。