Finally-操作返回值
Finally中操作返回值会出现一个问题?值没有被改变?
1 static int M1() 2 { 3 int result = 100; 4 try 5 { 6 result = result + 1; 7 //======引发异常的代码========== 8 int x = 10, y = 0; 9 Console.WriteLine(x / y); 10 //======引发异常的代码========== 11 return result; 12 } 13 catch 14 { 15 Console.WriteLine("catch被执行了"); 16 result = result + 1; 17 return result; 18 } 19 finally 20 { 21 Console.WriteLine("====finally被执行了================="); 22 result = result + 1; 23 } 24 }
结果是:
为什么会这样呢?不是说finally中的代码无论如何都会被执行吗?那就要看编译器会对我们的代码做了什么?
Reflector反编译的代码: 会把我们要返回的值在try-catch中操作之后赋给一个全局变量,并且返回。finally中也操作了num,但是没有赋值给num4。
对于引用类型是怎样的呢?这个大家可以试试,我就不写了,比较基础