C#的foreach语句不会解析为IL代码中的foreach语句。C#编译器会把foreach语句转换成IEnumerable接口的属性和方法。
foreach (var item in Person)
{
Console.WriteLine(item);
}
Console.ReadLine();
foreach语句会解析成下面的代码段。首先调用GetEnumerator()方法,获得整个数组的一个枚举器。在while循环中,只要moveNext()返回True,就调用Current属性访问数组的每个元素:
IEnumerable<Person> p = Person.GetEnumerator();
while (p.moveNext()) {
Person person = p.Current;
Console.WriteLine(person);
}