21

我想知道这是否有什么不同:

 for (int i = 0; i < values.Count; i++)
        {
            //
        }

对比

int num = values.Count;

for(int=0; i<num; i++)
{

}

我认为第二种方法更好,因为您不需要计算每次迭代中的所有项目。但我可能错了。有人可以照亮我吗?

4

3 回答 3

19

该列表已经在Count内部存储了它。您正在进行的比较与代码风格有关,而不是性能。由于编译器会优化 'Count' 的检索

于 2013-06-18T13:14:01.520 回答
16

好吧,您可以在这里查看 .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。所以它应该非常接近你自己存储值的性能。

于 2014-03-28T23:55:34.600 回答
3

这完全取决于是什么valuesCount可以完全不同地实现,具体取决于此对象的类型。

如果您谈论的是泛型List<T>- 然后 Count 被实现为不重新评估的内部属性 - 因此是更好的选择。

于 2013-06-18T13:13:42.613 回答