IEnumerable 與自定義 Enumerator

實現 IEnumerable 介面允許以與 BCL 集合相同的方式列舉類。這需要擴充套件跟蹤列舉狀態的 Enumerator 類。

除了迭代標準集合之外,示例還包括:

  • 使用基於函式而不是物件集合的數字範圍
  • 在集合上實現不同的迭代演算法,例如圖表集合上的 DFS 或 BFS
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;
        }
    }
}