Diferença entre IEnumerable e IEnumerator (com tabela)

IEnumerable e IEnumerator são interfaces disponíveis em C#. O primeiro é um módulo, enquanto o último é um objeto. 

IEnumerable produz IEnumerator. Aqui, GetEnumerator é usado para obter IEnumerator. O loop Foreach é usado para gerar código que usa Enumerator. Um enumerador é diferente de IEnumerator, pois IEnumerator é uma interface. Enumerator o implementa.

IEnumerable vs IEnumerator

A diferença entre IEnumerable e IEnumerator é que IEnumerable funciona para a interface genérica e IEnumerator funciona para todas as interfaces não genéricas. IEnumerable aponta para um objeto que pode ser enumerado, mas IEnumerator é implementado usando cada instrução para iteração. A interface IEnumerable usa o IEnumerator para iteração de todos os seus elementos usando para cada instrução.

IEnumerable é usado para localizar um objeto que é usado como uma interface. Ele é usado para a iteração de todos os elementos da coleção. O processo de iteração torna mais fácil atravessar na coleção. Ele atua como um objeto. GetEnumerator é um método usado para a implementação da interface IEnumerator.

IEnumerator possui dois métodos, Reset () e MoveNext (), e possui uma propriedade estendida que é conhecida como Current. MoveNext () é um método que produz um valor booleano que aponta o elemento final da lista. O método reset torna o enumerador sua posição padrão.

Tabela de comparação entre IEnumerable e IEnumerator

Parâmetros de comparaçãoIEnumerableIEnumerator
Tipo de InterfaceGenéricoNão genérico
Número de Métodos1Dois
DevoluçõesIEnumeratorNenhum
Estado do CursorNão pode reterPode reter
produtosObjeto enumeradoPara cada resultado de declaração
Maneira de escreverResumoConcreto

O que é IEnumerable?

Esta é uma interface implementada por uma classe enumerável. A coleção inteira em c# pode implementar uma interface IEnumerable. Ele retorna IEnumerator. Ele não muda de acordo com os especificadores de acesso usados no código. IEnumerable tem um método conhecido como GetEnumerator. Essa implementação é feita apenas dentro da classe.

O processo de iteração torna mais fácil atravessar na coleção. Ele atua como um objeto. GetEnumerator é um método usado para a implementação da interface IEnumerator. IEnumerable é frequentemente conhecido como uma interface genérica, pois o código é escrito em um tamanho muito menor porque precisa apenas de uma implementação única. Não importa quantos construtores são usados na implementação do código para iterar todos os elementos.

O código tem baixa manutenção, pois a modificação do código está em uma plataforma e não requer nenhuma mudança extra. Ele usa abstração para a iteração de todos os elementos do array. Ele usa um iterador IEnumerator que é usado para iteração de todos os elementos. Por ser uma classe genérica, ela faz facilmente a iteração dos elementos do array. Ele fornece uma interface comum. É usado em todas as classes não genéricas.

O que é IEnumerator?

Ele possui dois métodos para implementar a iteração de todos os elementos da coleção. Ele tem dois métodos que são MoveNext e Reset. MoveNext é um método que indica que a iteração não atingiu o último elemento da coleção.

 O método de redefinição faz a mesma coisa que parece. Ele aponta para iniciar novamente a iteração após a iteração anterior ser feita até o último elemento do array. Por último, o único objeto é Atual, que fornece o elemento atual como resultado da iteração. Tem algum acesso específico aos seus elementos. Ele apenas fornece acesso somente leitura a toda a sua matriz.

O IEnumerator chama a propriedade atual, que tem a responsabilidade de retornar o elemento da lista que está em uso no momento. Ele usa dois métodos e a propriedade para iteração do objeto. Cada instrução usa a lista de arrays e inicia a iteração avançando e usa um dos métodos. IEnumerator não pode retornar IEnumerable.

Ele pode facilmente recuperar o estado atual do cursor. IEnumerator usa uma forma concreta de escrever. Ele inicia a iteração na pilha iterando o primeiro elemento da pilha e terminando no último elemento da pilha.

Principais diferenças entre IEnumerable e IEnumerator

  1. IEnumerable é usado para interface genérica, mas IEnumerator é usado para interface não genérica.
  2. IEnumerable tem apenas um método, enquanto IEnumerator tem apenas dois métodos.
  3. IEnumerable pode retornar IEnumerator, mas IEnumerator não pode retornar IEnumerable.
  4. IEnumerable não pode reter o estado atual do cursor, mas IEnumerator pode reter.
  5. IEnumerable mostra um objeto enumerado, enquanto IEnumerator mostra para cada instrução.
  6. IEnumerable é uma maneira abstrata de escrever, mas IEnumerator usa uma maneira concreta de escrever.

Conclusões

IEnumerable é uma interface implementada por uma classe enumerável. Ele usa abstração para a iteração de todos os elementos do array. Ele usa um iterador IEnumerator que é usado para iteração de todos os elementos. O IEnumerator chama a propriedade atual, que tem a responsabilidade de retornar o elemento da lista que está em uso no momento.

Ele usa dois métodos e a propriedade para iteração do objeto. IEnumerable é frequentemente conhecido como uma interface genérica, pois o código é escrito muito menor. IEnumerator usa uma forma concreta de escrever. GetEnumerator é um método usado para a implementação da interface IEnumerator.

O processo de iteração torna mais fácil percorrer a coleção em IEnumerable. Ele atua como um objeto. MoveNext é um método que produz um valor booleano que aponta o elemento final da lista. IEnumerable retorna a interface IEnumerator quando passa pelo processo de iteração.

Ambos são usados para o processo de iteração, que segue diferentes formas de iteração. Ele usa um iterador para iterar todos os elementos na matriz da pilha. Eles diferem uns dos outros porque um usa abstração e o outro usa códigos concretos. Possui diferentes métodos e propriedades para recuperar o estado do cursor e manter a iteração da pilha.

Referências

  1. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.73.3969&rep=rep1&type=pdf#page=149
  2. https://ieeexplore.ieee.org/abstract/document/7883396/