IEnumerableCount()Length之间的主要区别是什么?

推荐答案

通过调用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必须枚举整个集合以确定它的长度.

.net相关问答推荐

尽管有`disable`注释,但未 suppress Pylint语法错误

EF Core IEntityTypeConfigurations:从数据库提取数据后相关对象为空

EFCore.DbSet.Update 方法添加新行而不是更新它

IIS 发布 ASP.NET Core 应用程序而不关闭 IIS 网站

C# - 获取不包括隐藏文件的文件列表

如何在 MSBuild 脚本中获取当前目录?

我可以从我的应用程序中抛出哪些内置 .NET 异常?

在目录中创建应用程序快捷方式

使用 .NET 在 Windows 中创建弹出式 toastr 通知

C# 时间跨度毫秒与 TotalMilliseconds

如何从 appsettings.json 中获取价值

C# 中 try/finally 的开销?

Java 和 .NET 技术/框架的类似物

ASP.NET Core 等效于 ASP.NET MVC 5 的 HttpException

覆盖 ASP.NET MVC 中的授权属性

List 是否保证项目将按照添加的顺序返回?

从字节数组中读取 C# 中的 C/C++ 数据 struct

.NET Remoting 真的被弃用了吗?

如何将两个 List 相互比较?

在构建事件命令行中放置注释的正确方法?