码迷,mamicode.com
首页 > Windows程序 > 详细

C# try-catch-return

时间:2016-01-01 11:10:54      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

正常执行try后才能执行finally,catch中的语句可能会影响finally的执行

使用 finally 块,可以清理在 Try 中分配的任何资源,而且,即使在 try 块中发生异常,您也可以运行代码。 通常,控件离开 try 语句之后,finally的语句会阻止运行。 正常执行中 break、continue、goto 或 return 语句的执行,或对 try 语句外部异常的传播,可能会导致发生控件转换。

已处理的异常中会确保运行关联的 finally 块。 但是,如果异常未得到处理,则 finally 块的执行取决于如何触发异常展开操作。 此操作又取决于计算机是如何设置的。 有关更多信息,请参见 Unhandled Exception Processing in the CLR(CLR 中的未经处理的异常处理)。

通常,当未经处理的异常中止应用程序时,finally 块是否运行并不重要。 但是,如果您拥有的 finally 块中的语句必须在该环境下运行,则一个解决方案是将 catch 块添加到 try-finally 语句中。 或者,可以捕获可能是在调用堆栈更上方的 try-finally 语句的 try 块中引发的异常。 即可以捕获调用了包含 try-finally 语句的方法中的、或调用了该方法的方法中的、或调用堆栈中任何方法中的异常。 如果未捕获异常,则 finally 块的执行取决于操作系统是否选择触发异常展开操作。

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);
            }
        }

 

 

C# try-catch-return

标签:

原文地址:http://www.cnblogs.com/weloveshare/p/5093045.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!