1. 程式人生 > >Finally-操作返回值

Finally-操作返回值

acc finall line style 返回值 console urn hide images

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。

技術分享

對於引用類型是怎樣的呢?這個大家可以試試,我就不寫了,比較基礎

Finally-操作返回值