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