c# - 我该如何解释这段代码?

标签 c# linq

在 .net 中,可以这样写:

(from n in numbers where n == 5 select n).ToList();

没有这些括号,就无法调用 ToList() 方法。我该如何向别人解释这一行的作用(我只能说它预编译了查询,但我不知道这是否真的 100% 正确)。

最佳答案

from n in numbers where n = 5 select n 实际上是 numbers.Where(n => n == 5) 的语法糖。因此,您正在使用 LINQ 表达式将数字列表过滤为等于 5 的数字。

但是,LINQ 评估惰性。这意味着 numbers.Where(n => n == 5)(IEnumerable)返回的对象不是数字列表等于五。该列表仅在需要时创建,即在尝试访问 IEnumerable 的元素时创建。

ToList 将此 IEnumerable 的内容复制到列表中,这意味着必须立即计算表达式。

关于c# - 我该如何解释这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427980/

相关文章:

c# - 为什么这个 LINQ 查询非常慢?

c# - 在 C# 中拆分 CSV 文件的有效方法

c# - 具有动态列组的 LINQ GroupBy

c# - 访问 groupby 中每个项目的详细信息

c# - 与 SimpleMembershipProvider 兼容的 ASP.NET Web API?

c# - 使用 dotnet pack 创建带有外部 .exe 文件的 NuGet 包

c# - 如何从 NameValueCollection 中获取所有值作为单个字符串?

c# - 这两个 LINQ 查询可以互换使用吗?

c# - 如何使用单选按钮排列列表框中的项目

c# - 如何检查 IEnumerable<DataRow> 返回 null 或有任何行?