关于c#:集合在foreach循环中使用

Collections use in foreach loop

我正在foreach循环中迭代一个集合,我想知道。当.NET运行时执行此操作时

1
2
3
foreach (object obj in myDict.Values) {
    //... do something
}

对于每个循环调用mydict.values还是只调用一次?

谢谢,


就一次。大致相当于:

1
2
3
4
5
6
7
8
using (IEnumerator<Foo> iterator = myDict.Values.GetEnumerator())
{
    while (iterator.MoveNext())
    {
        object obj = iterator.Current;
        // Body
    }
}

更多信息请参见C_4规范第8.8.4节。特别是,关于推断的迭代元素类型、处理以及C编译器如何处理不实现IEnumerableIEnumerable的类型上的foreach循环的详细信息。


简短回答:只叫一次。


它被调用一次,如果修改集合,它将生成一个异常。