【发布时间】:2011-03-18 16:40:14
【问题描述】:
List<int> list = ...
for(int i = 0; i < list.Count; ++i)
{
...
}
那么编译器是否知道 list.Count 不必每次迭代都被调用?
【问题讨论】:
-
它调用了一个变量,就像你使用
int count = list.Count并使用它一样。我对你的问题感到困惑? -
@Nathan:它实际上是在调用一个属性,这实际上是一个方法调用——而不是一个变量获取。这将由 JIT 来优化(通常不是 C# 编译器),但它不会发生。
-
好吧,使用这样的 for 循环,它可能必须这样做,因为您可以修改集合。
-
@Reed:我希望 JIT 确实优化了 getter/setter 的方法调用;我知道 Java 会这样做
-
@BlueRaja:在某些情况下确实如此,但并不总是对其进行优化。 Java 也一样...
标签: c# optimization compiler-construction