foreach 是否使用 IEnumerator/IEnumerable 作为内置类型?
foreach 循环使用接口 IEnumerator
和 IEnumerable
是否仅用于迭代自定义类型(类)的对象,或者也用于迭代内置类型(在幕后)?
Does the foreach loop use interfaces IEnumerator
and IEnumerable
only for iterating the objects of custom types (classes) or also for iterating the built-in types (behind the scenes)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Foreach 本身并不依赖于
IEnumerable
。但是,如果类型实现了它,那么 foreach 循环将能够枚举它(基于模式的匹配)。在幕后,它只需要一个
GetEnumerator()
方法,并且枚举器必须包含Current
和MoveNext()
。来自 MSDN:
来自 MSDN - 将 foreach 与集合结合使用
更新:请参阅更新的 MSDN 页面 - 如何:使用 foreach 访问集合类(C# 编程指南)。
Foreach doesn't depend on
IEnumerable
as such. However, if a type implements it then a foreach loop will be able to enumerate it (pattern-based matching).Behind the scenes it only needs a
GetEnumerator()
method and the enumerator must containCurrent
andMoveNext()
.From MSDN:
From MSDN - Using foreach with Collections
UPDATED: See updated MSDN page for this - How to: Access a Collection Class with foreach (C# Programming Guide) .
定义枚举器,没有 IEnumerable 声明。!
代码中的某个位置可以使用:
Define enumerator, no IEnumerable declaration.!
Somewhere in code can use :
foreach 对本机类型和自定义类型都使用 IEnumerable。例如,如果您查看 System.Array,它是所有数组类型的基础,它实现了 IEnumerable。
foreach uses IEnumerable for both native and custom types. If you look at System.Array for example, which is the base for all array types, it implements IEnumerable.
for-each 是语言构造,并没有真正区分自定义/内置类型。
foreach 不依赖于 IEnumerable,它使用基于模式的匹配。请参阅 http://blogs.msdn。 com/b/ericlippert/archive/2011/06/30/following-the-pattern.aspx
for-each is language construct and does not really differentiate between custom/built-in types.
for each is not dependent on
IEnumerable
, it uses pattern based matching. See http://blogs.msdn.com/b/ericlippert/archive/2011/06/30/following-the-pattern.aspx