Finally-操作返回值
Posted 【我是谁】
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。
对于引用类型是怎样的呢?这个大家可以试试,我就不写了,比较基础
以上是关于Finally-操作返回值的主要内容,如果未能解决你的问题,请参考以下文章
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?