Diferencia entre IEnumerable y IEnumerator

Antes de saltar a la diferencia entre IEnumerable e IEnumerator, primero entendamos los términos Enumerator y Enumerable y cuándo y por qué usarlos..

Enumerable es un módulo usado en la clase Array que le da Enumerator. La clase en sí no tiene cada método. De hecho, utiliza un método llamado 'GetEnumerator' que le da un enumerador para recuperar su elemento..

Un enumerador es un objeto que devuelve cada elemento de una colección en un orden específico, exactamente como se solicitan. El compilador genera código que utiliza un enumerador, cuando escribe un bucle foreach en C #.

IEnumerator es una interfaz implementada por un enumerador y la clase enumerable implementa la interfaz IEnumerable.

Lo que es inumerable?

IEnumerable es una interfaz básica que se utiliza para obtener un objeto que sabe cómo enumerar (o iterar) sobre los elementos de la colección..

Es una implementación del patrón de iteradores que proporciona un mecanismo para atravesar un objeto en la colección, independientemente de su estructura interna. La interfaz IEnumerable representa un objeto que se puede iterar en una colección.

Utiliza solo un método "GetEnumerator" que devuelve una instancia de clase de enumerador que implementa la interfaz IEnumerator.

Que es Ienumerator?

La interfaz de IEnumerator, una por otra parte, declara dos métodos, Reset () y MoveNext (), y una propiedad, Current. MoveNext () devuelve un vale booleano que indica el final de la lista y ayuda a posicionar el primer elemento de la lista después de llamar al método Reset (). Establece el enumerador en su posición predeterminada para que vuelva a iterar la lista desde el comenzando.

La propiedad actual solo se puede llamar a través de una instancia de la interfaz IEnumerator y devuelve el elemento actual en la lista.

Diferencia entre IEnumerable y IEnumerator

Fundamentos de IEnumerable e Ienumerator

Tanto IEnumerable como IEnumerator son interfaces que implementan el patrón de diseño del software del iterador en .Net Framework juntos. .Net Framework permite acceder a elementos individuales de la colección personalizada al implementar las interfaces IEnumerable e IEnumerator. La interfaz IEnumerable declara solo un método llamado GetEnumerator que devuelve otro tipo de interfaz llamada interfaz IEnumerator para esa colección en particular. IEnumerator, por otro lado, es la interfaz base para todos los enumeradores no genéricos que se utilizan para leer los datos en la colección. Sin embargo, los enumeradores no pueden utilizarse para modificar la colección subyacente.

Métodos

La interfaz IEnumerable define solo un método GetEnumerator () que es un método de instancia usado en varios tipos de colección diferentes. Obtiene un iterador IEnumerator que se puede usar para iterar sobre todos los valores de la colección. Cuando escribe un bucle foreach en C #, el código que genera llama al método GetEnumerator para crear el enumerador utilizado por el bucle.

IEnumerator, por otro lado, utiliza dos métodos MoveNext () y Reset () y una propiedad Current. El método MoveNext () lleva al enumerador al siguiente elemento de la colección, mientras que el método Reset () establece el enumerador en su posición predeterminada, que está antes del primer elemento de la colección..

Implementación

IEnumerable es una interfaz genérica que proporciona una abstracción para el bucle sobre elementos y, al implementar la interfaz IEnumerable, una clase genérica esencialmente habilita la iteración a través de la interfaz IEnumerator. Al hacerlo, estas clases terminan proporcionando una interfaz común para recuperar una instancia de un objeto IEnumerator que admite todo el conjunto básico de métodos de navegación.

IEnumerator es la interfaz base para los enumeradores y el uso de la interfaz IEnumerable requiere que la clase debe implementar el IEnumerator. Se deben implementar ambas interfaces si desea proporcionar soporte para foreach. La clase abstracta 'AbstractEnumerator' implementa la interfaz IEnumerator.

Funcionalidad de IEnumerable y IEnumerator

La interfaz IEnumerable, junto con la interfaz IEnumerator compatible, le permite recorrer en iteración los elementos de la pila utilizando la declaración 'foreach'. Es la interfaz básica utilizada para los objetos de tipo colección. La iteración comienza con el elemento superior de la pila y termina con el elemento más antiguo de la pila. En pocas palabras, representa un objeto que puede ser enumerado.

Junto con la interfaz de IEnumerator, permiten que los elementos ArrayList se puedan iterar de manera secuencial y estandarizada, comenzando con el primer elemento y avanzando. La instrucción foreach utiliza los métodos y las propiedades de la interfaz IEnumerator para iterar todos los elementos de una colección..

IEnumerable vs. IEnumerator: Cuadro de comparación

Resumen de los versos de IEnumerable IEnumerator

En pocas palabras, tanto IEnumerable como IEnumerator son interfaces que se usan para enumerar o iterar una clase que tiene una naturaleza de colección, lo que significa que facilitan el acceso iterativo en una colección personalizada. IEnumerable es la interfaz genérica disponible para los objetos de tipo de colección y al implementar la interfaz IEnumerable, una clase genérica esencialmente habilita la iteración a través de la interfaz IEnumerator. Utiliza solo un método GetEnumerator que devuelve una instancia de clase de enumerador que implementa la interfaz IEnumerator. La interfaz IEnumerator está diseñada para ser utilizada como accesores y no puede usarse para modificar la colección subyacente. Proporciona dos métodos abstractos, Reset () y MoveNext (), y una propiedad Current para llamar a un elemento en particular en una colección.