对于.NET源代码中的条件的循环变量声明

时间:2016-12-01 04:23:34

标签: c# .net

我一直在for挖掘ExpressionVisitor,我发现了这个for (int i = 0, n = nodes.Count; i < n; i++) { Expression node = Visit(nodes[i]); if (newNodes != null) { newNodes[i] = node; } else if (!object.ReferenceEquals(node, nodes[i])) { newNodes = new Expression[n]; for (int j = 0; j < i; j++) { newNodes[j] = nodes[j]; } newNodes[i] = node; } } 循环,

i = 0, n = nodes.Count; i < n

现在有什么特别的原因:i = 0; i < nodes.Count

是否有任何性能增益不在{{1}}?

2 个答案:

答案 0 :(得分:11)

最佳做法是在多次使用同一语句时使用变量。

这里,nodes.Count在以下两个地方使用,因此,使用变量而不是两次执行相同的语句。

for (int i = 0, n = nodes.Count; i < n; i++) {

newNodes = new Expression[n];

注意:正如评论中所讨论的那样,性能差异完全可以忽略不计。

答案 1 :(得分:2)

在这种情况下,我认为它没有任何太大的性能影响。但正如他们使用此n一样,这一行也是

newNodes = new Expression[n];

所以,

  • 程序必须只获得node.Count一次。
  • n无需再次分配。
  • 看起来更干净。

这就是它的全部内容。