为什么不是"Console.WriteLine("asdf");" 执行?所有其他人都是.难道不是因为我们不能从最终范围跳出来吗?
static bool Func()
{
try
{
try
{
}
finally
{
try
{
throw new ApplicationException();
}
finally
{
Console.WriteLine("asd");
}
Console.WriteLine("asdf");
}
}
finally
{
Console.WriteLine("asd");
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*yna 27
最后,块仅保证(至少主要保证,除了下面的MSDN之外),在try块抛出异常的情况下输入它们.如果在 finally块中抛出异常,则异常将导致控制离开finally块,并且该finally块中的其余代码将不会执行.
在您的情况下,未执行的行发生在同一个finally块中的异常之后,因此会跳过它.
在最后的块是有用的清理那些在分配的资源试块,以及运行,如果在发生异常时,需要即使执行任何代码的try块.通常,当控制离开try 语句时,执行finally块的语句,是否由于正常执行而发生控制转移,执行break,continue,goto或return 语句,还是传播异常在try语句之外.
在处理的异常中,保证运行关联的finally块.但是,如果未处理异常,则finally块的执行 取决于如何触发异常展开操作.反过来,这取决于您的计算机的设置方式.有关更多信息,请参阅CLR中的未处理异常处理.
注意:CLR中的未处理异常处理是对2008年9月MSDN杂志中的文章的引用.MSDN杂志的所有2008年及以前的版本仅作为.chm文件提供,并且需要在查看之前下载.