为什么行“Console.WriteLine(” asdf“);”被执行?所有其他的都是。难道不是因为我们不能从final范围跳出来吗?

static bool Func()
{
    try
    {
        try
        {
        }
        finally
        {
            try
            {
                throw new ApplicationException();
            }
            finally
            {
                Console.WriteLine("asd");
            }

            Console.WriteLine("asdf");
        }
    }
    finally
    {
        Console.WriteLine("asd");
    }
}

最佳答案

最后,仅在尝试块引发异常的情况下才保证(至少主要是保证,请参见下面的MSDN摘录)它们将被输入。如果在fint块中抛出异常,则该异常将导致控件离开finally块,并且该finally块中的其余代码将不执行。
在您的情况下,未执行的行发生在同一finally块中的异常之后,因此将被跳过。
MSDN - try-finally:

注意:Unhandled Exception Processing in the CLR是对《 MSDN杂志》 2008年9月号中的文章的引用。 《 MSDN杂志》的所有2008年及更早版本均仅以.chm文件形式提供,在查看之前需要先下载。

关于c# - 最后嵌套在C#中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11039591/

10-15 06:29