Sono un po 'sorpreso di trovare i risultati del seguente codice, dove voglio semplicemente rimuovere tutti 3s da una sequenza di int:LINQ - SkipWhile è rotto?
var sequence = new [] { 1, 1, 2, 3 };
var result = sequence.SkipWhile(i => i == 3); // Oh noes! Returns { 1, 1, 2, 3 }
Perché non è di 3 saltati?
mio pensiero successivo è stato, OK, l'operatore Tranne farà il trucco:
var sequence = new [] { 1, 1, 2, 3 };
var result = sequence.Except(i => i == 3); // Oh noes! Returns { 1, 2 }
In sintesi,
- Tranne rimuove il 3, ma anche rimuove elementi non distinti. Grr.
- SkipWhile non salta l'ultimo elemento , anche se corrisponde alla condizione . Grr.
Qualcuno può spiegare perché SkipWhile non salta l'ultimo elemento? E qualcuno può suggerire quale operatore LINQ posso usare per rimuovere il '3' dalla sequenza sopra?
Pensalo come SkipWhile (true). quindi, la prima condizione (i == 3) fallisce. quindi diventa SkipWhile (false) e quindi cosa succede dopo? Restituisce ogni elemento rimanente! –