当你做这样的事情时:
for (int i = 0; i < collection.Count; ++i )
每次迭代都会调用 collection.Count 吗?
如果 Count 属性动态获取调用计数,结果会改变吗?
最佳答案
Yes Count 将在每次通过时进行评估。原因是在循环执行期间可能会修改集合。鉴于循环结构,变量 i 应该代表迭代期间集合中的有效索引。如果没有在每个循环上都进行检查,那么这不能证明是正确的。示例案例
for ( int i = 0; i < collection.Count; i++ ) {
collection.Clear();
}
此规则的一个异常(exception)是在约束为长度的数组上循环。
for ( int i = 0; i < someArray.Length; i++ ) {
// Code
}
在某些情况下,CLR JIT 将对这种类型的循环进行特殊处理,因为数组的长度无法更改。在这些情况下,边界检查只会发生一次。
引用:http://blogs.msdn.com/brada/archive/2005/04/23/411321.aspx
关于c# - for循环中的条件是否在每次迭代中都被评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/655373/