我了解以下 C# 代码:
var evens = from n in nums where n % 2 == 0 select n;
编译为:
var evens = nums.Where(n => n % 2 == 0);
但是它编译成那个是什么意思?我的印象是 C# 代码直接编译成 CIL?
我了解以下 C# 代码:
var evens = from n in nums where n % 2 == 0 select n;
编译为:
var evens = nums.Where(n => n % 2 == 0);
但是它编译成那个是什么意思?我的印象是 C# 代码直接编译成 CIL?
我想你误会了什么。查询表达式:
var evens = from n in nums where n % 2 == 0 select n;
不编译为:
var evens = nums.Where(n => n % 2 == 0);
相反,这两行代码直接编译为 CIL。碰巧它们编译为(有效地)相同的 CIL。编译器在分析查询代码的过程中可能会将查询转换为中间形式,但最终的结果当然是CIL。
这是一个 C#/LINQ 表达式:
var evens = from n in nums where n % 2 == 0 select n;
这是一个 C# lambda 表达式:
var evens = nums.Where(n => % 2 == 0);
它们都是C #,并且都被编译成 CIL。
您可以在此处阅读有关 lambda 的更多信息:
您可以在此处阅读有关 LINQ 的更多信息:
这两个表达式是等价的。
一个不会“编译”到另一个中。诚实的 :)