C#高级编程读书笔记——foreach

C#中的foreache语句不会解析为IL代码中的foreach语句。C#编译器把foreach语句转换为IEnumerable接口的方法和属性。
下面是一个简单的foreach语句,它迭代了数组persons中所有元素
foreach(person p in persons)
{
Console.Writeline(p);
}
foreach语句会解析为下面代码段。首先,调用GetEnumerable()方法,获得数组的一个枚举。在while循环中,只要MoveNext()返回为true,用Current属性访问数组中的元素:
IEnumerator enumerator = persons.GetEnumerator();
while(enumerator.MoveNext())
{
Person P = (Person) enumerator.Current;
Console.WriteLine(p);
}

C#1.0使用了foreach语句可以轻松实现迭代集合,但创建枚举器需要做大量工作,C#2.0添加了yield语句,以便创建枚举器。
yield return 返回集合中的一个元素,并移动到下一个元素上。yield break 可停止迭代。
public class HelloCollection
{
public IEnumerator GetEnumerator()
{
yield return "Hello";
yield return "World";
}
}

posted on 2009-07-27 11:28  边写边唱  阅读(345)  评论(0编辑  收藏  举报

导航