【发布时间】:2011-09-08 15:22:56
【问题描述】:
我一直在搜索互联网,但无法找到任何关于 C# 中 foreach 循环的幕后真实情况的答案。
我知道这个问题与实际编码无关,但它困扰着我。我对 OO 编程,尤其是接口很陌生。我知道它们是合同,并且我了解 IEnumerable 和 IEnumerator 的工作原理——至少我是这么认为的。
我一直在 MSDN 上阅读这篇文章: IEnumerable Interface
我了解一切是如何设置的。尽管在Main 循环中,我有点不清楚foreach 如何知道遍历_people 中的所有值。它怎么知道这个?它如何通过调用return new PeopleEnum(_people); 来跟踪Current?
编辑:我看不出这是一个完全相同的副本。是的,它的相似理由和相同的问题被问到,但我们正在寻找不同的答案或我想要的答案在上一个问题中没有讨论。
像 foreach(int i in obj) {...} 这样的 foreach 循环有点等同于
...“有点”不是我正在寻找的答案。
【问题讨论】:
-
查看使用 Ildasm.exe 的 dll 代码,以获得应该有所帮助的简单 Foreach。
-
我一遍又一遍地阅读。我知道它告诉你如何使用
foreach循环,但它并没有真正解释编译器如何使用它。我对幕后更感兴趣。 -
@Adam:在可能重复的接受答案中,它大致显示了它归结为的代码。当然,下面 Eric 的回答要详细得多。
-
好吧,现在当有人像我一样决定在 Google 上搜索“
foreach循环的幕后”时,它将位于顶部链接中,他们会得到一个非常具体、非常详细的答案。 -
我不相信它是完全重复的。另一个问题是“哪些类型的类可以使用 foreach 循环”而不是详细解释它是如何工作的。