【发布时间】:2011-11-12 03:24:40
【问题描述】:
我正在遍历 foreach 循环中的集合,并且想知道。 当它被 .NET 运行时执行时
foreach (object obj in myDict.Values) {
//... do something
}
是每个循环都调用 myDict.Values 还是只调用一次?
谢谢,
【问题讨论】:
我正在遍历 foreach 循环中的集合,并且想知道。 当它被 .NET 运行时执行时
foreach (object obj in myDict.Values) {
//... do something
}
是每个循环都调用 myDict.Values 还是只调用一次?
谢谢,
【问题讨论】:
只有一次。大致相当于:
using (IEnumerator<Foo> iterator = myDict.Values.GetEnumerator())
{
while (iterator.MoveNext())
{
object obj = iterator.Current;
// Body
}
}
有关详细信息,请参阅 C# 4 规范的第 8.8.4 节。特别是有关推断的迭代元素类型、处置以及 C# 编译器如何处理未实现 IEnumerable 或 IEnumerable<T> 的类型的 foreach 循环的详细信息。
【讨论】:
简短回答:它只被调用一次。
【讨论】:
它被调用一次,如果集合被修改会产生一个异常。
【讨论】: