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         }
View Code

结果是:

为什么会这样呢?不是说finally中的代码无论如何都会被执行吗?那就要看编译器会对我们的代码做了什么?

Reflector反编译的代码:  会把我们要返回的值在try-catch中操作之后赋给一个全局变量,并且返回。finally中也操作了num,但是没有赋值给num4。

 对于引用类型是怎样的呢?这个大家可以试试,我就不写了,比较基础

原文地址:https://www.cnblogs.com/entclark/p/7598567.html