C# Compiled to CIL
本文关键字:CIL to Compiled | 更新日期: 2023-09-27 18:26:30
我了解以下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中。
你可以在这里阅读更多关于lambdas的信息:
-
http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx
-
http://www.dotnetperls.com/where
你可以在这里阅读更多关于LINQ的信息:
- http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx
这两个表达式是等价的。
一个不被"编译"到另一个中。诚实:)