在Count()对集合进行迭代/预处理之前,是否有任何速度改进或确实指向检查Enumerable?
List<int> numbers = new List<int>();
if(numbers.Count() > 0)
{
foreach(var i in numbers) {/*Do something*/}
}
Run Code Online (Sandbox Code Playgroud)
Tim*_*ter 19
不,反之亦然.如果它不是一个集合(如a List或Array),而是一个延迟执行的查询,它必须完全执行,这可能非常昂贵,只是为了确定计数.在你的例子中,它实际上是一个List,Enumerable.Count足够聪明,可以尝试将它强制转换为ICollection<T>/ ICollectionfirst.如果成功,Count则使用该属性.
所以只需使用foreach.如果序列为空则不会受到影响,循环将立即退出.
出于同样的原因,最好使用Enumerable.Any而不是Count() > 0如果你只想检查序列是否包含至少一个元素.意图也更清楚了.