C# 如何查看语法糖的c编译器输出

C# 如何查看语法糖的c编译器输出,c#,visualization,C#,Visualization,我想看看是否有一种方法或工具可以查看闭包或查询表达式是如何由c编译器在后台创建的。我注意到,许多处理这些问题的博客文章都会包含带有语法糖的原始代码以及编译器将其转换为的底层c代码。例如,对于linq和查询表达式,它们将显示: var query = from x in myList select x.ToString(); 然后生成的代码将是 var query = myList.Select(x=>x.ToString()); 有没有可能使用工具,或者你只需要知道它是如何从规范开始工

我想看看是否有一种方法或工具可以查看闭包或查询表达式是如何由c编译器在后台创建的。我注意到,许多处理这些问题的博客文章都会包含带有语法糖的原始代码以及编译器将其转换为的底层c代码。例如,对于linq和查询表达式,它们将显示:

var query = from x in myList select x.ToString();
然后生成的代码将是

var query = myList.Select(x=>x.ToString());

有没有可能使用工具,或者你只需要知道它是如何从规范开始工作的?

你想走多远


如果您真的想看看编译后的代码是什么样子,那么应该查看ildasm.exe。该工具将向您展示编译应用程序时生成的冷、硬、IL。此工具将允许您打开任何已编译的程序集,查看引擎盖下的实际螺母和螺栓。

Resharper可以非常轻松地将LINQ表达式语法转换为lambda语法


LINQPad有一个选项卡,可以为您输入的查询显示lambda表达式语法,还有另一个选项卡可以将其分解到IL代码级别。另一个选项卡显示了使用LINQ to SQL或LINQ to Entities时生成的SQL。

我不是Resharper的用户,但我相信这会起作用。 您似乎已经知道Linq语法查询的另一种形式。我认为这就是答案;知道你在做什么。仔细阅读。如果你不知道,你是危险的,你将无法接近我的代码库

说真的,这需要最少的阅读,并为您提供了C语言的强大功能。如果您对自己的工作感兴趣,您就知道这一点。

是您正在寻找的工具


从中,SharpLab显示了代码编译的中间步骤和结果。它使您能够像编译器看到的那样查看代码,并更好地理解.NET语言。

Resharper可以在这两种形式之间切换。@Darryl-这听起来更像是一个答案,而不是一个注释。。。获得一些荣誉!当我理解你是正确的,你想看看汇编的IL代码,以检查编译器是如何利用它的。网络反射器是你的朋友。这有点不清楚,因为您的示例将指向ReSharper之类的东西,但您也要求提供编译后的代码。LINQPad可以做到这一点,而且还可以做更多,但您必须在受支持的数据源sqlWell上执行请求。我看得不太清楚。以我在问题中提出的linq示例为指导。在编译器将查询表达式转换为方法调用后,我可以看到显示查询表达式的输出吗?或者就像我说的,你必须知道这是怎么回事。好吧,这就是我从一开始就认为是这样的。但我想确定一下,因为这样的工具对我来说非常方便!这对linq很有效,但我想找一些更通用的。它可以显示C为您所做的所有语法转换。但是罗伯特的回答让我相信这是不可能的。哦well@MattPhillips:Linqpad实际上是一个迷你IDE,您可以在其中运行任何C代码,然后查看由该代码生成的IL。这是真正理解有多少语法糖的唯一方法,因为,例如,myList.Selectx=>x.ToString本身就是Enumerable.SelectmyList、delegateint x{return x.ToString;}的语法糖,而委托闭包本身可以说是创建具有单个,隐式函数和x变量的私有引用。很好。这就是我一直在寻找的东西。我认为我最好的选择肯定是学习规范: