为什么.Count没有括号?

时间:2013-12-11 11:33:12

标签: c#

如果我在C#中有一个项目列表(例如List<string> items),我可以同时使用这两个项目:

items.Count()

items.Count

获取项目总数。它们都有可用吗?为什么不采用方法.Count()

我注意到,如果我过滤列表(并最终得到IEnumerable<string>):

items.Distinct().Count()

然后必须使用.Count()。那么为什么List<string>允许.Count呢?

3 个答案:

答案 0 :(得分:11)

因为System.Linq.Enumerable上有一个(LINQ) extension method,另一个是property on the class

答案 1 :(得分:1)

因为它是List<T>类的Count属性。因此,List<T> IEnumerable<T> Count()您也可以Count()扩展。

BTW Count扩展名只会返回ICollection属性的值,如果可枚举的源实现ICollection is3 = source as ICollection; if (is3 != null) return is3.Count; 接口(此属性声明的地方):

{{1}}

答案 2 :(得分:1)

Count属性不是扩展名,而是ICollection<T>的属性,因此属于List<T>

Count()函数是LINQ扩展。它的工作原理是实际计算集合中的项目数,而不是像Count属性一样在字段中保持计数。

编辑显然,Count()会调用Count,如果可用的话。{/ p>