我一直在 ExpressionVisitor 中挖掘 .NET ,我发现了这个 for 循环,

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 中没有的任何性能提升吗?

最佳答案

当您多次使用同一个语句时,最好使用一个变量。

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

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

和,
newNodes = new Expression[n];

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

10-06 04:34