是否有一种方法可以知道finally是否在try或catch之后执行



我认为这个标题完全解释了我的问题。

我想知道,我在finally语句上执行我的代码,如果它来自trycatch

有可能吗?

最简单的方法是:

bool success = false;
try
{
    ...
    // This should be the last statement in the try block
    success = true;
}
catch(...)
{
    ...
}
finally
{
    if (success)
    {
        ...
    }
}

这不是一个特定的语言特性—它只是使用了这样一个事实,即除了真正显著的情况(基本上是异步异常)之外,您不会在赋值给success之后得到异常。

注意,successfalse并不意味着任何catch块已经执行-它可能是一个异常被抛出,你没有捕捉(或者你在try块结束之前返回)。基本上,只有表示"到达try块的末尾" -这通常是所有需要的。

最新更新