Ich habe gerade entdeckt, dass Except()
alle Elemente in der zweiten Liste von der ersten löscht, aber es hat auch den Effekt, dass alle Elemente im zurückgegebenen Ergebnis verschieden sind.
Ich benutze einfach Where(v => !secondList.Contains(v))
Kann mir jemand erklären, warum dies das Verhalten ist, und wenn möglich, verweisen Sie mich auf die Dokumentation, die das erklärt?
Die Dokumentation für die Funktion Except
lautet:
Erzeugt den Satzunterschied zweier Sequenzen, indem er den Standard-Gleichheitsvergleich verwendet, um Werte zu vergleichen.
Der Satzunterschied von zwei Mengen ist definiert als die Elemente der ersten Menge, die nicht in der zweiten Menge erscheinen.
Das wichtigste Wort hier ist set , das definiert als:
... eine abstrakte Datenstruktur, die bestimmte Werte speichern kann, ohne eine bestimmte Reihenfolge und keine wiederholten Werte ...
Da Except
als eine mengenbasierte Operation dokumentiert ist, hat dies auch den Effekt, dass die resultierenden Werte unterschieden werden.
Sie haben geschrieben:
Ich benutze einfach
Where(v => !secondList.Contains(v))
Wenn Sie dies tun, wird immer noch Disct mit secondList
gemacht.
Zum Beispiel:
%Vor%Ich habe eine Erweiterungsmethode erstellt, um überhaupt keine Unterschiede zu haben. Beispiel für die Verwendung:
%Vor%Das ist was es macht:
Dies ist die Quelle:
%Vor%Edit: Eine schnellere Implementierung, basierend auf dem Kommentar von DigEmAll
%Vor%Weitere Informationen auf mein Blog (auch Variante für Intersect und Union)