C# try-catch-return

正常執行try後才能執行finally,catch中的語句可能會影響finally的執行html

使用 finally 塊,能夠清理在 Try 中分配的任何資源,並且,即便在 try 塊中發生異常,您也能夠運行代碼。 一般,控件離開 try 語句以後,finally的語句會阻止運行。 正常執行中 break、continue、goto 或 return 語句的執行,或對 try 語句外部異常的傳播,可能會致使發生控件轉換。web

已處理的異常中會確保運行關聯的 finally 塊。 可是,若是異常未獲得處理,則 finally 塊的執行取決於如何觸發異常展開操做。 此操做又取決於計算機是如何設置的。 有關更多信息,請參見 Unhandled Exception Processing in the CLR(CLR 中的未經處理的異常處理)。app

一般,當未經處理的異常停止應用程序時,finally 塊是否運行並不重要。 可是,若是您擁有的 finally 塊中的語句必須在該環境下運行,則一個解決方案是將 catch 塊添加到 try-finally 語句中。 或者,能夠捕獲多是在調用堆棧更上方的 try-finally 語句的 try 塊中引起的異常。 便可以捕獲調用了包含 try-finally 語句的方法中的、或調用了該方法的方法中的、或調用堆棧中任何方法中的異常。 若是未捕獲異常,則 finally 塊的執行取決於操做系統是否選擇觸發異常展開操做。ui

try-catch-return的執行順序
 
無論是在try中,仍是在catch中,只要他們中有return和底部的finally同時存在,就在程序運行最後先執行finally,再執行return,try-catch-return中共享一個局域(變量在其中保持一致)
 
       static void Main()
        {
            Console.WriteLine(Test());
            Console.ReadKey();
        }
    
       static int Test()
        {
            int num = 0;
            try
            {
                num = 1;
                throw new Exception("手動控制拋出異常");
                return num;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return num;  
            }
            finally
            {
                num++;
                Console.WriteLine("我在Finally中num={0}", num);
            }
        }
相關文章
相關標籤/搜索