我想知道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 :/");
}
答案 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。它一定会帮到你。