Linq Enumerable.Count()与属性计数
实现System.Collection.ICollection的类知道其序列中有多少元素。它们具有返回序列号的属性计数。例如列表、字典和队列 实现IEnumerable的其他类可能不实现ICollection。你没有财产计数。但是,通过对所有元素进行枚举和计数,仍然可以知道序列中元素的数量 对我来说,后一种方法似乎慢得多 方法Enumerable.Count(这个IEnumerable)唯一知道序列的是它实现了IEnumerable。它不知道序列有一个属性,该属性提供了元素的数量 通常这意味着,如果对列表进行计数(),函数必须遍历所有元素 但是,Enumerable.Count(IEnumerable)的实现可以检查序列是否实现了接口ICollection,如果实现了接口ICollection,则可以返回Count而不是对其进行枚举 问题:Count(这个IEnumerable)是否足够聪明,可以检查序列是否实现ICollection,或者它是否总是迭代所有元素?Linq Enumerable.Count()与属性计数,linq,count,ienumerable,enumerable,Linq,Count,Ienumerable,Enumerable,实现System.Collection.ICollection的类知道其序列中有多少元素。它们具有返回序列号的属性计数。例如列表、字典和队列 实现IEnumerable的其他类可能不实现ICollection。你没有财产计数。但是,通过对所有元素进行枚举和计数,仍然可以知道序列中元素的数量 对我来说,后一种方法似乎慢得多 方法Enumerable.Count(这个IEnumerable)唯一知道序列的是它实现了IEnumerable。它不知道序列有一个属性,该属性提供了元素的数量 通常这意味着,
如果是后者,那么使用Count函数扩展Enumerable是否明智,该函数检查对象是否实现ICollection,如果实现,则返回ICollection.Count()?查看源代码如何 在第1905行,您可以通过以下行看到计数方法:
ICollection<TSource> collectionoft = source as ICollection<TSource>;
if (collectionoft != null) return collectionoft.Count;
ICollection collection = source as ICollection;
if (collection != null) return collection.Count;
ICollection collectionft=源作为ICollection;
如果(collectionoft!=null)返回collectionoft.Count;
ICollection collection=源作为ICollection;
if(collection!=null)返回collection.Count;
如您所见,当IEnumerable
是ICollection
时,该方法使用ICollection.Count
属性
考虑到,带有签名Count(此IEnumerable源代码,Func谓词)
的未实现此功能(因为您提供了自定义计数方法;)
编辑:
还应该提到,LongCount
方法不使用
由于所有这些原因,没有必要实现您自己的
Count()
我会使用。@TimSchmelter噢,谢谢您。。。我甚至不知道这个网站;有没有其他不使用github的理由?据我所知没有。但我喜欢MS站点,您可以轻松搜索方法或类,并查看引用方法的位置(单击方法名称)。我也喜欢第一手资料。当你点击F12时,还有一个可以直接带你到方法的参考资料来源。别谢我,谢谢@SLaks谁写的