foreach
语句为阵列中的每个元素或实现接口System.Collections.IEnumerable
或System.Collections.Generic.IEnumerable<T>
的对象集合重复一组嵌入式语句。foreach和IEnumerable之间有什么关系?
我知道如果我们想在对象集合上使用foreach,我们需要在它上面实现IEnumerable。
我想了解在IEnumerable中如何实现'foreach'的用法?
IEnumerable的源代码似乎只有一个函数'GetEnumerator',显然没有实现,因为IEnumerable是一个接口 - 那么foreach关键字如何实际使用IEnumerable接口进行枚举?
编辑: 也在试图理解它在这方面:
IEnumerable<Int> myNumbers = new IEnumerable<Int>();
其中的GetEnumerator()被调用/这里使用?
编辑2:
因此,答案似乎是:
1:鸭子类型 - (感谢@Alexei Levenkov我接受@horrorcat作为一个答案,因为我只能接受一种:))
(感谢@Gary Vass的)
它只是调用这个方法。 – SLaks
IEnumerable的实现者实现了GetEnumerator()方法,foreach调用这个方法,然后使用生成的IEnumerator遍历元素。 – Lukazoid
也许你应该阅读[接口(C#编程指南)](http://msdn.microsoft.com/en-us/library/ms173156.aspx) –