【发布时间】:2014-01-31 01:09:34
【问题描述】:
foreach语句为实现System.Collections.IEnumerable或System.Collections.Generic.IEnumerable<T>接口的数组或对象集合中的每个元素重复一组嵌入语句。
我知道如果我们想在一个对象集合上使用 foreach,我们需要在它上面实现 IEnumerable。
我想了解在 IEnumerable 中实现如何启用“foreach”的使用?
IEnumerable的源码好像只有一个函数'GetEnumerator',显然没有实现,因为IEnumerable是一个接口——那么foreach关键字究竟是如何使用IEnumerable接口进行枚举的呢?
编辑: 也试图在这种情况下理解它:
IEnumerable<Int> myNumbers = new IEnumerable<Int>();
这里调用/使用了哪个 GetEnumerator()?
编辑 2:
所以答案似乎是:
1:DuckTyping --(感谢@Alexei Levenkov。我接受@horrorcat 作为答案,因为我只能接受一个:))
2. 我在尝试创建接口的具体实例时犯了一个明显的错误(在我的问题的第二部分)——(感谢@Gary Vass)
【问题讨论】:
-
它只是调用那个方法。
-
IEnumerable的实现者实现了方法GetEnumerator(),foreach 调用该方法然后使用生成的IEnumerator对元素进行迭代。 -
您不能创建接口的具体实例。
标签: c# foreach ienumerable ienumerator