30 Stimmen

LINQ - ist SkipWhile gebrochen?

Ich bin etwas überrascht über die Ergebnisse des folgenden Codes, bei dem ich einfach alle 3en aus einer Folge von Ints entfernen möchte:

var sequence = new [] { 1, 1, 2, 3 };
var result = sequence.SkipWhile(i => i == 3); // Oh noes! Returns { 1, 1, 2, 3 }

Warum wird 3 nicht übersprungen?

Mein nächster Gedanke war: OK, die Ausnahmeregelung wird es schon richten:

var sequence = new [] { 1, 1, 2, 3 };
var result = sequence.Except(i => i == 3); // Oh noes! Returns { 1, 2 }

Zusammengefasst,

  • Außer den 3 entfernt, sondern auch entfernt nicht unterscheidbare Elemente. Grr.
  • SkipWhile überspringt nicht die letzte Element, auch wenn es der Bedingung entspricht. Grr.

Kann jemand erklären, warum SkipWhile das letzte Element nicht überspringt? Und kann jemand vorschlagen, welche LINQ-Operator kann ich verwenden, um die "3" aus der obigen Sequenz zu entfernen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X