c# - for循环中的条件是否在每次迭代中都被评估?

标签 c# .net loops

当你做这样的事情时:

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/

相关文章:

c# - 无法将类型为 'System.Random' 的对象转换为类型 'System.IConvertible'

c# - VS 2010 是否允许我在 C# 中使用新的 async 和 await 关键字?

c# - 为什么我得到 "The given path' 格式不受支持”错误

bash - 从bash中的变量执行for循环内的命令

C# 泛型类型

c# - Xpath 无法解析 XML : Namespace manager or XsltContext needed

c# - 从头开始创建 DSP 系统

c# - 将 utf8 转换为 1251

loops - 防止片段着色器中的循环展开

java - 输出的第一部分(打印星星)不好