c#中return关键字和finally关键字之间的关系

时间:2013-09-19 06:39:41

标签: c# exception-handling

我想找出“return”和“finally”关键字之间的关系。什么是执行顺序以及发生异常时会发生什么,并且在代码块执行某些操作后调用return关键字,如果有两个嵌套的finally块,如下所示,

        try
        {
            try
            {

            }
            catch (Exception)
            {
                //do some stuff
                return;
            }
            finally
            {

            }
        }
        catch (Exception)
        {

        }
        finally
        {

        }

6 个答案:

答案 0 :(得分:5)

来自MSDN

  

通常,当控制离开try语句时执行 finally 块的语句,是否由于正常执行而发生控制转移,执行中断继续转到,或返回声明,或例外传播出来的try语句

在您的示例中,两个finally块都将执行。内部将首先执行,然后外部将最终执行。

答案 1 :(得分:1)

无论发生什么,终于块都将被执行。 就返回而言,如果尝试块包含返回,它实际上会执行类似将其存储在某个变量中的操作,并返回最后,在执行finally块之后。像这样:

try{
    return xyz; //(i.e, temp = xyz;)
    }
catch() {}
finally {}
return temp;

答案 2 :(得分:0)

finally表示运行此代码 发生

无论是什么意思returncatch

答案 3 :(得分:0)

最后总是被执行。无论您是否获得异常,您的finally块都将执行。在你的情况下,你的两个finall块都会被执行。

答案 4 :(得分:0)

如果内部try块发生了一些错误,控件将转到内部catch块,然后是内部finally,最后是外部,然后返回你在​​内部catch块中所做的值。

尝试调试代码,您将获得流程

答案 5 :(得分:0)

即使异常也会终止执行finally块。要理解下面的代码

    try
    {
    //sql connection opened
    //execute a query ----> EXCEPTION OCCURRED HERE 

//return the result
    }catch(Exception ex)
    {
    throw ex;
    }
    finally{
    //close the connection
    }

上面是演示finally块的广泛使用场景的代码。即使执行查询时发生异常,也必须关闭与数据库的连接。

如果没有异常,那么finally块也会执行,然后返回结果