C# Language
Enumerable
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;
}
}
}