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编译器如何处理不实现
简短回答:只叫一次。
它被调用一次,如果修改集合,它将生成一个异常。