Se ha preguntado un par de veces sobre SO cómo puede implementar un enumerador bidireccional (here, here). Mi pregunta no es cómo (que es trivial para la mayoría de los casos), pero por qué no existe ese tipo en la plataforma .NET.¿Por qué .NET no tiene un enumerador bidireccional?
public interface IBidirectionalEnumerator<T> : IEnumerator<T>
{
bool MovePrev();
}
Obviamente, hay muchos tipos de colección que no puede implementar esto, como MoveNext()
es destructivo o cambia el estado de la colección subyacente. Pero a la inversa, muchos tipos pueden implementar esto trivialmente (List
, IList
, LinkedList
, array
).
¿Por qué no existe ese tipo?
Hay algo muy incorrecto en el diseño de su colección si al enumerarlo cambia su estado. – Joren
de acuerdo. Pero de hecho hay algunas colecciones que deberían cambiar al enumerar, como una pila o una cola. –
A menos que use IEnumerable envuelto sobre un tipo de transmisión o un recurso del sistema como un StreamReader o una lista de archivos. –