Nach etwas mehr als einer Stunde verbrachte einen Fehler in unserem Code debuggen, die am Ende etwas über die Enumerable.Except Methode erwiesen, die wir nicht wussten über:Warum gibt Enumerable.Except DISTINCT-Elemente zurück?
var ilist = new[] { 1, 1, 1, 1 };
var ilist2 = Enumerable.Empty<int>();
ilist.Except(ilist2); // returns { 1 } as opposed to { 1, 1, 1, 1 }
oder allgemeiner:
var ilist3 = new[] { 1 };
var ilist4 = new[] { 1, 1, 2, 2, 3 };
ilist4.Except(ilist3); // returns { 2, 3 } as opposed to { 2, 2, 3 }
mit Blick auf der MSDN-Seite:
Diese Methode liefert die Elemente in ersten, die in der zweiten nicht erscheinen. Es nicht auch die Elemente in Sekunde, die nicht in der ersten erscheinen.
ich es, dass in Fällen wie folgt aus:
var ilist = new[] { 1, 1, 1, 1 };
var ilist2 = new[] { 1 };
ilist.Except(ilist2); // returns an empty array
Sie das leere Array erhalten, weil jedes Element in der ersten Reihe ‚erscheint‘ in der zweiten und daher entfernt werden sollte.
Aber warum erhalten wir nur bestimmte Instanzen aller anderen Elemente, die nicht im zweiten Array erscheinen? Was ist der Grund für dieses Verhalten?
Meiner Meinung nach, riecht wie ein Fehler oder unbeabsichtigte Funktionalität. Die MSDN-Seite sagt nicht über ein eindeutiges Ergebnis aus ... –
Dies ist kein Fehler. Die Methode "Except" soll in den SQL-Operator "EXCEPT" übersetzt werden, der als eine Mengenoperation definiert ist. Da es sich um eine Mengenoperation handelt, werden nur bestimmte Elemente zurückgegeben. Die "Unterscheidbarkeit" wird durch die Verwendung der Terminologie "set" von MSDN impliziert. – Gabe