退出Try / Catch以防止运行后的代码

时间:2010-04-30 21:52:04

标签: c#

我的方法中有一个try / catch:

    }
    catch (OurCustomExceptionObject1 ex)
    {
       txtErrorMessage.InnerHtml = "test 1";
    }
    catch(OurCustomExceptionObject2 ex)
    {
        txtErrorMessage.InnerHtml = "test 2";
    }
    catch (OurCustomExceptionObject3 ex)
    {
        txtErrorMessage.InnerHtml = "test 3";
    }

    ... rest of code here is being executed after the try/catch

如果捕获到任何异常,我不希望其余代码运行。我正在处理异常。我听说出于某种原因不使用Exit Try。这是真的,这样做很糟糕吗?这是阻止执行代码后执行代码的正确方法吗?

3 个答案:

答案 0 :(得分:34)

catch-block中的return,重新抛出异常,或者从try-block内的try-block下面移动代码。

答案 1 :(得分:2)

立即想到两个选项:

  1. return直接从每个catch内部(如BlueRaja建议的那样)
  2. errorOccurred块中为您不想允许的异常设置一个标志(例如catch),然后将if (errorOccurred) return;放在整个try / catch块之后
  3. 后者可能对其他开发人员更具可读性,因为很容易略过catch内部发生的事情来弄清楚之后会发生什么。看到一个明显的if (errorOccurred) return;使得很难误解发生的事情。

答案 2 :(得分:1)

从高层次来看,我认为这可能违反(至少)单一责任原则,如果你的代码试图做一些可能失败的事情,然后继续做更​​多的事情。

为了回答,如果你想做一个黑客(这总是坏的,所以不要),你可以做

bool success = true;
try
{
    // the good ol' college try
}
catch (...)
{
    success = false;
}

if (success)
{
    // do the rest of your stuff
}

编辑或者正如BlueRaja建议的那样,将所有代码放入try块。如果第一位失败,则失败。其余的代码无论如何都不会运行。