Contesto tipico: creo un metodo di estensione per una raccolta che considera che gli elementi siano ordinati. La funzione inizia all'inizio, all'indice 0 e l'ordine ha significato. Esempi: Raggruppamento per sequenza o Indici di un elemento .
Tuttavia, sono sempre perplesso su cosa estendere: IEnumerable<T>
o T[]
. Il mio fondamento logico era la chiarezza di scopo: un array ha una nozione di ordinamento, mentre un IEnumerable è implementato da molte collezioni generiche, non tutte hanno una nozione di ordine:
- Dizionario - non ordinato
- HashSet - non ordinato
- LinkedList - ordinato
- Elenco - ordinato
- Coda - ordinata
- SortedDictionary - ordinato (non nell'ordine originale)
- SortedList - ordinato (non originale)
- SortedSet - ordinato (non originale)
- Stack - invertito
Così come ogni altra implementazione che potrebbe o non potrebbe essere ordinata.
Inoltre, non sono sicuro che l'enumeratore venga resettato se non viene completata un'enumerazione, quindi se è una preoccupazione, allora chissà a che punto inizierà l'enumerazione? L'enumerazione di un array inizia sempre all'inizio.
Quindi per me ha più senso estendere un T[]
. Ma ho ragione a pensarlo? Mi sto preoccupando troppo? Qual è l'approccio corretto per garantire l'enumerazione "ordinata"?