È stato chiesto un paio di volte su SO come è possibile implementare un enumeratore bidirezionale (here, here). La mia domanda non è come (che è banale nella maggior parte dei casi), ma perché non esiste questo tipo nella piattaforma .NET.Perché .NET non ha un enumeratore bidirezionale?
public interface IBidirectionalEnumerator<T> : IEnumerator<T>
{
bool MovePrev();
}
Ovviamente, ci sono molti tipi di raccolta che non possono implementano questo, come MoveNext()
è distruttivo o cambia lo stato della raccolta sottostante. Al contrario, molti tipi possono implementare questo banalmente (List
, IList
, LinkedList
, array
).
Perché questo tipo non esiste?
C'è qualcosa di molto sbagliato nella progettazione della raccolta se l'operazione di enumerazione cambia il suo stato. – Joren
concordato. Ma ci sono davvero alcune collezioni che cambiano mentre si enumerano, come una pila o una coda. –
A meno che non si utilizzi IEnumerable avvolto su un tipo di streaming o su una risorsa di sistema come StreamReader o elenco di file. –