多种.Count用法的最佳实践

时间:2015-01-04 20:02:12

标签: c#

因此,以下2个代码块中的哪一个在性能/最佳实践等方面是“最佳”。

每次使用时多次调用.Count属性。

List<string> myStrings = new List<string>();
myStrings.Add("foo");
myStrings.Add("bar");

if (myStrings.Count >= 1)
{
    Console.WriteLine(myStrings.Count);
}

存储计数一次并重复使用,因为我们可以假设列表没有任何更改。

List<string> myStrings = new List<string>();
myStrings.Add("foo");
myStrings.Add("bar");

int myCount = myStrings.Count;
if (myCount >= 1)
{
    Console.WriteLine(myCount);
}

2 个答案:

答案 0 :(得分:3)

List<T>对于Count来说并不是特别重要,因为List会存储它的数量并能够便宜地返回它。

对于任意IEnumerable的{​​{1}}扩展方法,最好使用临时变量来避免多次调用Count。这是因为Count扩展方法必须遍历整个集合(它将检测IList并使用快速计数,但例如yield return枚举不实现IList

答案 1 :(得分:2)

myStrings.Count实际上并不计算任何内容,它只是获取存储的计数并返回它。所以它或多或少都是一样的。

由于优化器将优化它的相同的注释可能适用于这样一个简单的情况,但如果编译器无法确定列表是否未从另一个线程访问,则肯定不会成立。< / p>