c#中foreach原理
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();
}
}

浙公网安备 33010602011771号