LINQ - ist SkipWhile kaputt?

Ich bin ein bisschen überrascht, zu finden, die Ergebnisse des folgenden code, wo ich einfach nur entfernen möchten alle 3s aus einer Sequenz von int-Werten:

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

Warum nicht 3 übersprungen?

Mein Nächster Gedanke war, OK, der operator "Außer" wird den trick tun:

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

In der Zusammenfassung,

  • Entfernt, außer die 3, sondern auch
    entfernt nicht verschiedene Elemente. Grr.
  • SkipWhile nicht überspringen Sie die letzten
    element, selbst wenn es stimmt mit dem
    Zustand. Grr.

Kann mir jemand erklären, warum SkipWhile nicht überspringen, das Letzte element? Und kann jemand empfehlen, was LINQ-Betreiber kann ich verwenden, um entfernen Sie die '3' von der Sequenz oben?

  • Denke, dass es als SkipWhile(true). also, deine erste Bedingung (i==3) schlägt fehl. so, es wird SkipWhile(false) und so was passiert als Nächstes ? Es kehrt alle Elemente noch!
Schreibe einen Kommentar