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";
}
}

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2018-11-06
  • 2022-02-09
  • 2022-12-23
  • 2021-11-03
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-02-02
  • 2021-04-03
  • 2022-12-23
  • 2022-01-23
  • 2021-12-20
  • 2021-11-28
  • 2021-09-20
相关资源
相似解决方案