我被告知以下代码块之间存在性能差异。

foreach (Entity e in entityList)
{
 ....
}


for (int i=0; i<entityList.Count; i++)
{
   Entity e = (Entity)entityList[i];
   ...
}

哪里
List<Entity> entityList;

我不是CLR的期望,但从我可以告诉他们,应该归结为基本相同的代码。有没有人有这样或那样的具体证据?

最佳答案

foreach创建枚举器的实例(从getEnumerator返回),并且该枚举器在foreach循环的整个过程中也保持状态。然后在枚举器上重复调用next()对象,并为返回的每个对象运行代码。
它们不会以任何方式归结为相同的代码,真的,如果您编写自己的枚举器,您将看到这一点。

09-26 14:33