通过调用Count on IEnumerable<T>
,我假设您指的是System.Linq.Enumerable
上的扩展方法Count
.Length
不是IEnumerable<T>
上的方法,而是中数组类型的属性.例如int[]
.
不同之处在于性能.Length
号房产保证为O(1)型运营.Count
扩展方法的复杂性因对象的运行时类型而异.它将try 转换为支持O(1)长度查找的几种类型,比如通过Count
属性转换为ICollection<T>
.如果没有可用项,则它将枚举所有项并对其进行计数,其复杂性为O(N).
例如
int[] list = CreateSomeList();
Console.WriteLine(list.Length); // O(1)
IEnumerable<int> e1 = list;
Console.WriteLine(e1.Count()); // O(1)
IEnumerable<int> e2 = list.Where(x => x <> 42);
Console.WriteLine(e2.Count()); // O(N)
值e2
被实现为不支持O(1)计数的C#迭代器,因此方法Count
必须枚举整个集合以确定它的长度.