【发布时间】:2012-11-26 18:38:14
【问题描述】:
我想知道 CSC 编译器用 TRY-CATCH 块做了什么。例如,编译器将如何处理如下代码?
在编译为 MSIL 之前,编译器会将基本代码更改为其他形式的 C# 代码吗?我可以预览此代码吗?使用 TRY-CATCH 块的编译器规则是什么?
try
{
int x =45;
var obj = new MyObject(++x);
obj.MyMethod(1234, "qwerty");
short result = x / obj.Function(x);
}
catch(Exception ex)
{
Console.Writeline(@"Something goes wrong :/");
}
【问题讨论】:
-
您是否尝试编译代码然后在其上使用 ildasm?请阅读tinyurl.com/so-list
-
ildasm.exe 将显示我的 MSIL 代码,我想看看编译器如何更改此代码
-
“为另一个 C#”是什么意思?编译器的重点是将 C# 转换为 MSIL... 为什么您期望 try/catch 可以在 C# 中以不包括 try/catch 的另一种形式表示?
-
是什么让您对优化有这样的想法?编译器很少有理由将 C# 转换为 C#...查询表达式会浮现在脑海中,但其他方面则不多。
-
@Jacek,您的问题中已经有了“最终编译为 MSIL 的代码”。内部编译器并不将代码表示为 C#,它只是某种抽象语法树......您可能会问编译器是如何工作的,但它会偏离主题(正如“龙书”所写的那样)。
标签: c# .net exception compiler-construction