C#的foreach语句

为什么foreach可以迭代出一个集合的所有元素?

foreach(var p in persions)
{
Console.WriteLine(p);
}

资料上说:编译器会把foreach的语句翻译为如下代码去执行:

IEnumerator enumerator = persons.GetEnumerator();
While(enumerator.MoverNext())
{
Person p= enumerator.Current;
Console.WriteLine(p);
}

  1. foreach首先调用GetEnumerator()获取集合的枚举器。而GetEnumerator是在IEnumerable的接口中定义的。所以首先实现IEnumerable的接口来获取Enumerator。
  2. 然后要是实现IEnumerator中定义的接口:MoveNext ,Reset和Current。
  3. 总体看来,实现数组的迭代读取是:先用GetEnumerator来获取数组的xx,不知道获取的是什么。好像是C++的指针,然后靠IEnumerator中固定实现好的方法来循环读取。

难道C#是把C++中的相关的操作组合一下,实现了foreach的方法。这也说明知识是相通的哈。

你可能感兴趣的:(C#的foreach语句)