编译器用try-catch块做了什么

时间:2012-11-26 18:38:15

标签: c# .net exception compiler-construction

我想知道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 :/");
}

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

见这里:http://weblogs.asp.net/kennykerr/archive/2004/09/15/230167.aspx

try-catch块实际上在IL中看起来与在源代码中看起来非常相似。 IL的确切内容取决于您在源代码中指定的内容;有一些构造,比如.fault(类似finally但只在抛出异常时执行),没有C#/ VB等价,但编译器仍然可以识别“common” “错误处理代码并将它们放在一个.fault块中。

答案 2 :(得分:1)

try - catch是一个在编译期间完全分析的概念,因此在运行时不会产生很大的影响。

请查看此link。它一定会帮到你。