Pergunta

Posso assumir que o IEnumerator que recebo de um IList (chamando o método GetEnumerator a partir da interface IEnumerable) vai me dar os itens na ordem da lista?

Foi útil?

Solução

Você não pode, porque IList é uma interface e uma implementação pode enumerar itens em qualquer ordem. Por exemplo, eu poderia implemenent WeirdList: IList, e tê-lo enumerar itens em qualquer forma, incluindo não-determinística. Se você usar uma List (T), por outro lado, garante a itens Enumerar na ordem em que são armazenados na lista.

Editar : Dito isto, como muitos outros apontam, a maioria das implementações seguirá a semântica de List (T). Embora isso não era o que você pediu;)

Outras dicas

O recenseador deve dar-lhe acesso aos objetos dentro da lista em relação à sua posição na memória o que seria o mesmo que usar o indexador da lista que vai de 0 a Comprimento <1 em um loop for.

Editar: eu respondi especificamente no que diz respeito às classes .NET framework que implementam IList, deve qualquer outra pessoa implementam essas interfaces sua implementação real poderia ser apenas sobre qualquer coisa. Por isso depende do implementador.

Sim, ele vai fazer exatamente isso, para qualquer implementação decente de IList pelo menos. Um bom IList deve sempre enumerar os seus elementos na mesma ordem em que a lista é indexada.

List<int> list = new List<int> { 1, 1, 2, 3, 5, 8 };

IEnumerator<int> enumtor = list.GetEnumerator();
while (enumtor.MoveNext())
{
    Console.Write(enumtor.Current);
}

Prints 112358.

Isso vai depender da implementação do IList

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top