在finally块中抛出异常后,返回值会发生什么?

时间:2012-03-07 00:20:27

标签: c# return try-catch

我写了下面的测试代码,尽管我很确定会发生什么:

static void Main(string[] args)
{
    Console.WriteLine(Test().ToString());
    Console.ReadKey(false);
}

static bool Test()
{
    try
    {
        try
        {
            return true;
        }
        finally
        {
            throw new Exception();
        }
    }
    catch (Exception)
    {
        return false;
    }
}

果然,该程序向控制台写了“False”。我的问题是,最初返回的真实情况会发生什么?有没有办法获得这个值,如果可能的话,在catch块中,或者如果没有,可以在原始的finally块中获取?

只是为了澄清,这仅用于教育目的。我永远不会在实际程序中制作这样一个错综复杂的异常系统。

1 个答案:

答案 0 :(得分:5)

不,不可能获得该值,因为毕竟只返回bool。但是,您可以设置变量。

static bool Test()
{
    bool returnValue;

    try
    {
        try
        {
            return returnValue = true;
        }
        finally
        {
            throw new Exception();
        }
    }
    catch (Exception)
    {
        Console.WriteLine("In the catch block, got {0}", returnValue);
        return false;
    }
}
但是,这很麻烦。出于教育目的,答案是否定的。