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;
        }
    }
}