我该如何解释这段代码?

Gur*_*epS 4 c# linq

在.net中,可以写:

(from n in numbers where n == 5 select n).ToList();
Run Code Online (Sandbox Code Playgroud)

如果没有这些括号,则无法调用ToList()方法.我怎么能向某人解释这条线的作用(我可以说它是预编译查询,但我不知道这实际上是100%正确).

Hei*_*nzi 6

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的内容复制到列表中,这意味着必须立即评估表达式.


Red*_*ter 5

括号用于消除.ToList()可能仅指的解析器的歧义n.