c#中實現了 IEnumerable或 IEnumerable<T>接口的類才可以作為foreach對象
c#中Foreach不會解析成IL中的foreach,比如下面的代碼
foreach (var item in persons) { Console.WriteLine(item); }
在c#中會解析成類似於這樣的代碼,首先調用GetEnumerator方法獲得一個枚舉器,然后在MoveNext方法中只要返回為true就用Current獲得當前元素
IEnumerator enumerator = persons.GetEnumerator(); while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current); }
IEnumerable接口的實現方法
public class Persons : IEnumerable { public string first; public string last; public IEnumerator GetEnumerator() { string current = first; while (current != null) { yield return current; current = last; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }