Buscar..


Introducción

IEnumerable es la interfaz base para todas las colecciones no genéricas como ArrayList que se pueden enumerar. IEnumerator<T> es la interfaz base para todos los enumeradores genéricos como List <>.

IEnumerable es una interfaz que implementa el método GetEnumerator . El método GetEnumerator devuelve un IEnumerator que proporciona opciones para iterar a través de la colección como foreach.

Observaciones

IEnumerable es la interfaz base para todas las colecciones no genéricas que se pueden enumerar

Enumerable

En su forma más básica, un objeto que implementa IEnumerable representa una serie de objetos. Los objetos en cuestión se pueden iterar usando la palabra clave c # foreach .

En el siguiente ejemplo, el objeto sequenceOfNumbers implementa IEnumerable. Representa una serie de enteros. El bucle foreach recorre cada uno de ellos.

int AddNumbers(IEnumerable<int> sequenceOfNumbers) {
    int returnValue = 0;
    foreach(int i in sequenceOfNumbers) {
        returnValue += i;
    }
    return returnValue;
}

Enumerable con enumerador personalizado

La implementación de la interfaz IEnumerable permite que las clases se enumeren de la misma manera que las colecciones BCL. Esto requiere extender la clase Enumerator que rastrea el estado de la enumeración.

Aparte de iterar sobre una colección estándar, los ejemplos incluyen:

  • Uso de rangos de números basados ​​en una función en lugar de una colección de objetos
  • Implementar diferentes algoritmos de iteración sobre colecciones, como DFS o BFS en una colección de gráficos
public static void Main(string[] args) {

    foreach (var coffee in new CoffeeCollection()) {
        Console.WriteLine(coffee);
    }
}

public class CoffeeCollection : IEnumerable {
    private CoffeeEnumerator enumerator;

    public CoffeeCollection() {
        enumerator = new CoffeeEnumerator();
    }

    public IEnumerator GetEnumerator() {
        return enumerator;
    }

    public class CoffeeEnumerator : IEnumerator {
        string[] beverages = new string[3] { "espresso", "macchiato", "latte" };
        int currentIndex = -1;

        public object Current {
            get {
                return beverages[currentIndex];
            }
        }

        public bool MoveNext() {
            currentIndex++;

            if (currentIndex < beverages.Length) {
                return true;
            }

            return false;
        }

        public void Reset() {
            currentIndex = 0;
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow