C# Language IEnumerable avec un énumérateur personnalisé


Exemple

L'implémentation de l'interface IEnumerable permet d'énumérer les classes de la même manière que les collections BCL. Cela nécessite l'extension de la classe Enumerator qui suit l'état de l'énumération.

Outre l'itération sur une collection standard, voici des exemples:

  • Utilisation de plages de nombres basées sur une fonction plutôt que sur une collection d'objets
  • Implémenter différents algorithmes d'itération sur des collections, comme DFS ou BFS sur une collection de graphes
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;
        }
    }
}