LINQ est SkipWhile cassé?

Je suis un peu surpris de trouver les résultats de le code suivant, où je veux simplement supprimer toutes les 3s à partir d'une séquence d'entiers:

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

Pourquoi ce n'est pas 3 ignorés?

Ma prochaine pensée a été, OK, à l'Exception de l'opérateur fera l'affaire:

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

En résumé,

  • Sauf supprime les 3, mais aussi
    supprime non-éléments distincts. Grr.
  • SkipWhile ne saute pas la dernière
    élément, même si elle correspond à l'
    condition. Grr.

Quelqu'un peut m'expliquer pourquoi SkipWhile ne pas sauter le dernier élément? Et quelqu'un peut-il suggérer des opérateurs LINQ je peux utiliser pour supprimer le '3' de la séquence ci-dessus?

  • Il pense que SkipWhile(true). donc, votre première condition (i==3) échoue. il devient donc de SkipWhile(faux) et donc ce qui se passe ensuite ? Elle retourne tous les éléments restants!