Diferencia entre IEnumerable e IEnumerator

Diferencia entre IEnumerable e IEnumerator

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

Enumerable es un módulo utilizado en la clase de matriz que le da enumerador. La clase en sí no cada método. De hecho, utiliza un método llamado 'getenumerator' que le brinda un enumerador para recuperar su artículo.

Un enumerador es un objeto que devuelve cada elemento en una colección en un orden específico, exactamente como se solicita. El compilador genera un código que usa 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.

¿Qué es Ienumerable??

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

Es una implementación del patrón de iterador 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.

¿Qué es ienumerator??

La interfaz IEnumerator, una de la otra mano, declara dos métodos: Reset () y Movenext () y una propiedad, actual. El movimiento () devuelve un valle booleano que indica el final de la lista y ayuda a colocar el primer elemento en la lista después de llamar al método reset (): establece el enumerador en su posición predeterminada de modo que para reiterarse la lista desde el comienzo.

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

Diferencia entre IEnumerable e IEnumerator

Conceptos básicos de Ienumerable e Ienumerator

Tanto IEnumerable como IEnumerator son interfaces que implementan el patrón de diseño de software Iterator en el .Marco neto juntos. El .Net Framework hace que el acceso a elementos individuales en la colección personalizada al implementar interfaces IEnumerables 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 se pueden usar para modificar la colección subyacente.

Métodos

La interfaz IEnumerable define solo un método getenumerator () que es un método de instancia utilizado 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 actual. El método MoveNext () lleva el 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 en la colección.

Implementación

IEnumerable es una interfaz genérica que proporciona una abstracción para bucle sobre elementos e implementando 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 enumeradores y el uso de la interfaz IEnumerable requiere que la clase implementa el IEnumerator. Ambas interfaces deben implementarse, si desea brindar soporte para Foreach. La clase abstracta 'AbstractEnumerator' implementa la interfaz IEnumerator.

Funcionalidad de Ienumerable e Ienumerator

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

Junto con la interfaz IEnumerator, habilitan los elementos ArrayList que se iteran de manera estandarizada y secuencial, comenzando con el primer elemento y en el futuro. La declaración de Foreach utiliza los métodos y propiedades de la interfaz IEnumerator para iterar todos los elementos en una colección.

Ienumerable vs. IEnumerator: tabla de comparación

Resumen de Ienumerable Versos IEnumerator

En pocas palabras, tanto IEnumerable como IEnumerator son interfaces utilizadas 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 objetos de tipo de recolección e implementando la interfaz IEnumerable, una clase genérica permite esencialmente iteración a través de la interfaz IEnumerator. Utiliza solo un método GetEnumerator que devuelve una instancia de clase Enumerator que implementa la interfaz IEnumerator. La interfaz IEnumerator está destinada a usarse como accesorios y no se puede usar para modificar la colección subyacente. Proporciona dos métodos abstractos RESET () y MoveNext (), y una propiedad de propiedad para llamar a un elemento particular en una colección.