是否在任何地方指定了lambda->表达式树转换过程?

Mas*_*ler 8 .net c# linq language-specifications

在C#中编译LINQ查询有两个重要步骤.第一种是将LINQ查询语法转换为方法调用链,如C#语言规范的第7.16节所述.此转换过程详细指定,语言开发人员可以使用它在新的CLR语言上实现类似的查询语法.

第二步是将lambda表达式转换为表达式树,这在调用返回的查询方法时发生IQueryable,但在调用返回的方法时则不会IEnumerable.它是否曾经指明过这种转换是如何发生的,与查询语法转换过程的解释相似?

NSF*_*SFW 5

实际上,表达树的构造明确没有定义.编译器开发人员可以自由地使用他们希望的任何方法,前提是执行表达式会产生与调用lambda相同的结果.

这是C#语言规范的引用:


6.5.2评估表达式树类型的匿名函数转换

将匿名函数转换为表达式树类型会生成表达式树(第4.6节).更确切地说,对匿名函数转换的评估导致构造表示匿名函数本身的结构的对象结构.表达式树的精确结构以及创建它的确切过程是实现定义的.


我在最后添加了粗体字.

我怀疑这是故意未指定的,以便让编译器开发人员可以自由地实现他们认为有用的任何优化.表达式树的严格规范会阻止这种情况.