我知道这.Count()
是 LINQ 中的一种扩展方法,并且从根本上说它使用.Count
,所以我想知道,我应该什么时候使用Count()
,什么时候应该使用.Count
?主要是.Count()
为尚未执行的可查询集合更好地保存,因此还没有枚举?我总是使用扩展方法更安全.Count()
吗,反之亦然?还是这完全取决于收藏?
非常感谢任何建议或文章。
更新 1
在 LINQ 中反编译扩展方法后,如果is an or ,.Count()
它似乎正在使用该.Count
属性,这是大多数答案所建议的。现在我能看到的唯一真正的开销是额外的 null 和类型检查,我想这不是很大,但如果性能至关重要,仍然可以产生少量的差异。IEnumerable<T>
ICollection<T>
ICollection
这是.Count()
.NET 4.0 中反编译的 LINQ 扩展方法。
public static int Count<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
ICollection<TSource> collection = source as ICollection<TSource>;
if (collection != null)
{
return collection.Count;
}
ICollection collection2 = source as ICollection;
if (collection2 != null)
{
return collection2.Count;
}
int num = 0;
checked
{
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
while (enumerator.MoveNext())
{
num++;
}
}
return num;
}
}