LINQ: ¿SkipWhile está roto?

Estoy un poco sorprendido de encontrar los resultados del siguiente código, donde simplemente quiero eliminar los 3s de una secuencia de entradas:

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

¿Por qué no se omiten 3?

Mi siguiente pensamiento fue, OK, el operador Excepto hará el truco:

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

En resumen,

Excepto elimina los 3, pero también elimina elementos no distintos. Grr.SkipWhile no omite el último elemento, incluso si coincide con la condición. Grr.

¿Alguien puede explicar por qué SkipWhile no omite el último elemento? ¿Y alguien puede sugerir qué operador LINQ puedo usar para eliminar el '3' de la secuencia anterior?

Respuestas a la pregunta(5)

Su respuesta a la pregunta