因此,以下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);
}
答案 0 :(得分:3)
List<T>
对于Count
来说并不是特别重要,因为List会存储它的数量并能够便宜地返回它。
对于任意IEnumerable
的{{1}}扩展方法,最好使用临时变量来避免多次调用Count
。这是因为Count
扩展方法必须遍历整个集合(它将检测IList
并使用快速计数,但例如yield return
枚举不实现IList
)
答案 1 :(得分:2)
myStrings.Count
实际上并不计算任何内容,它只是获取存储的计数并返回它。所以它或多或少都是一样的。
由于优化器将优化它的相同的注释可能适用于这样一个简单的情况,但如果编译器无法确定列表是否未从另一个线程访问,则肯定不会成立。< / p>