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?

C# Compiled to 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

这两个表达式是等价的。

一个被"编译"到另一个中。诚实:)