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