Contexto típico: Eu faço um método de extensão para uma coleção que considera que os elementos estão ordenados. A função começa no início, no índice 0, e a ordem tem significado. Exemplos: agrupando por sequência ou índices de um item .
No entanto, estou sempre perplexo quanto ao que estender: IEnumerable<T>
ou T[]
. Minha lógica era a clareza de propósito: uma matriz tem uma noção de ordenação, enquanto um IEnumerable é implementado por muitas coleções genéricas, nem todas com noção de ordem:
- Dicionário - não ordenado
- HashSet - não ordenado
- LinkedList - encomendado
- Lista - ordenada
- Fila - solicitada
- SortedDictionary - classificado (não na ordem original)
- SortedList - ordenada (não na ordem original)
- SortedSet - classificado (não na ordem original)
- Pilha - invertida
Bem como qualquer outra implementação que possa ou não ser solicitada.
Além disso, não tenho certeza se o enumerador é redefinido se uma enumeração não for concluída. Portanto, se isso for uma preocupação, quem sabe em que ponto a enumeração seria iniciada? Enumerar uma matriz sempre começaria no começo.
Então, para mim, faz mais sentido estender a T[]
. Mas estou correto ao pensar isso? Estou me preocupando demais? Qual é a abordagem adequada para garantir a enumeração "ordenada"?