我想知道这是否有所不同:
for (int i = 0; i < values.Count; i++)
{
//
}
VS
int num = values.Count;
for(int=0; i<num; i++)
{
}
我认为第二种方法更好,因为您不需要计算每次迭代中的所有项目。但我可能错了。有人可以照亮我吗?
答案 0 :(得分:14)
该列表已在内部存储其Count
。您正在进行的比较与代码样式有关,而与性能无关。由于编译器将优化“Count”的检索
答案 1 :(得分:11)
你可以在这里查看.NET源代码 http://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs#aa7e01fcb80a917e
public int Count {
get {
Contract.Ensures(Contract.Result<int>() >= 0);
return _size;
}
}
看起来列表上的.Count属性会进行快速内部检查,然后返回_size。所以它应该非常接近你自己存储价值的表现。
答案 2 :(得分:3)
这完全取决于values
是什么。 Count
可以完全不同地实现,具体取决于此对象的类型。
如果您正在讨论通用List<T>
- 那么Count将被实现为不重新评估的内部属性 - 因此是更好的选择。