为什么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);
}
- foreach首先调用GetEnumerator()获取集合的枚举器。而GetEnumerator是在IEnumerable的接口中定义的。所以首先实现IEnumerable的接口来获取Enumerator。
- 然后要是实现IEnumerator中定义的接口:MoveNext ,Reset和Current。
- 总体看来,实现数组的迭代读取是:先用GetEnumerator来获取数组的xx,不知道获取的是什么。好像是C++的指针,然后靠IEnumerator中固定实现好的方法来循环读取。
难道C#是把C++中的相关的操作组合一下,实现了foreach的方法。这也说明知识是相通的哈。