我理解以下C#代码:
var evens = from n in nums where n % 2  == 0 select n;
Run Code Online (Sandbox Code Playgroud)
编译为:
var evens = nums.Where(n => n % 2 == 0);
Run Code Online (Sandbox Code Playgroud)
但它是什么意思,它编译到那?我的印象是C#代码直接编译成CIL?
我认为你误解了一些东西。查询表达式:
var evens = from n in nums where n % 2 == 0 select n;
Run Code Online (Sandbox Code Playgroud)
不编译为:
var evens = nums.Where(n => n % 2 == 0);
Run Code Online (Sandbox Code Playgroud)
相反,这两行代码直接编译为 CIL。碰巧它们编译成(实际上)相同的 CIL。编译器在分析查询代码的过程中可能会将查询转换为中间形式,但最终的结果当然是CIL。