6

我了解以下 C# 代码:

var evens = from n in nums where n % 2  == 0 select n;

编译为:

var evens = nums.Where(n => n % 2 == 0);

但是它编译成那个是什么意思?我的印象是 C# 代码直接编译成 CIL?

4

2 回答 2

2

我想你误会了什么。查询表达式:

var evens = from n in nums where n % 2 == 0 select n;

编译为:

var evens = nums.Where(n => n % 2 == 0);

相反,这两行代码直接编译为 CIL。碰巧它们编译为(有效地)相同的 CIL。编译器在分析查询代码的过程中可能会将查询转换为中间形式,但最终的结果当然是CIL。

于 2013-08-06T03:28:00.333 回答
1

这是一个 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 的更多信息:

这两个表达式是等价的。

一个不会编译”到另一个中。诚实的 :)

于 2013-08-06T03:31:44.490 回答