LINQ Extension Methods: Union

Die Erweiterungsmethode Union bietet die Möglichkeit, 2 Sequenzen des gleichen Typs zu einer so zusammenzuführen, dass von jedem Element nur noch eine Entsprechung übrig bleibt. Damit verhält sich Union wie der Aufruf von Concat().Distinct().

Die Reihenfolge der Elemente in der Ergebnissequenz ergibt sich aus der Reihenfolge innerhalb der einzelnen Listen, die nacheinander abgearbeitet werden.
Ohne Union - Extension Method sieht das in etwa so aus

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

Der Vergleich wird - wenn nicht anders angegeben - mit dem Default - EqualityComparer<T> vollzogen.

Genauso verhält sich auch die Union-Erweiterungsmethode, die wie folgt aufgerufen wird

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