Fondamentalmente mi chiedo perché MS abbia deciso di implementare un enumeratore che supporta solo l'avanzamento: MoveNext()
.Qual è il motivo per cui le interfacce IEnumerable/IEnumerable <T> hanno solo MoveNext?
Non è più flessibile applicare anche MovePrevious
per questa interfaccia ampiamente utilizzata in tutto il framework .NET?
Posso immaginare che il Linq.Reverse
sia molto più semplice da implementare per MS e più efficiente in termini di prestazioni, ma non sono sicuro che ciò renda le altre cose più lente o sovraccarichi enormemente tutto il resto.
Chiunque abbia più conoscenze in materia può fornire maggiori informazioni al riguardo? vale a dire i pro e contro di avere o non avere MovePrevious
in IEnumerable/IEnumerable<T>
.
ITraversable? :) –
@MarkSimpson: mi sarebbe piaciuto avere visto un metodo 'Skip', insieme a una proprietà che avrebbe indicato se poteva accettare valori negativi. Nessun ragionevole 'IEnumerator' dovrebbe avere qualche difficoltà nell'implementazione di un metodo skip-forward-N-items, e per le collezioni basate su tree potrebbe consentire il recupero di elementi M da una collezione di N per prendere O (M + logN) piuttosto che O (MlogN) o O (N), che sono altrimenti il meglio che si possa ottenere tramite 'IList'. –
supercat