C#的foreach语句

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

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

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

IEnumerator<Person> 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的方法。这也说明知识是相通的哈。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容