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