LINQ Extension Methods: Intersect

Mit der Intersect-Erweiterungsmethode vergleicht man zwei Sequenzen des gleichen Typs miteinander und erhält als Ergebnis eine neue Sequenz, in der die Elemente der ersten Sequenz vorhanden sind, die auch in der 2. Sequenz vorkommen (Gegenteilig zur LINQ Extension Methods: Except). Dabei wird jedes Element nur einmal aufgeführt. Verglichen wird - wenn man nichts anderes angibt - mit EqualityComparer<T>.Default.

Ohne Intersect Extension Method kann man das Verhalten in etwa so nachbilden

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private List<T> Intersect<T>(List<T> list1, List<T> list2, EqualityComparer<T> comparer) {
var ret = new List<T>();
if (comparer == null) comparer = EqualityComparer<T>.Default;
for (int i = 0; i < list1.Count; i++) {
if (
!ret.Contains(list1[i], comparer) &&
list2.Contains(list1[i], comparer)
) {
ret.Add(list1[i]);
}
}
return ret;
}

Der Aufruf mit Erweiterungsmethode kann so erfolgen

1
2
list1.Intersect(list2);
list1.Intersect(list2, EqualityComparer<T>.Default);