从异常捕获中重新抛出异常

Gor*_*oro 2 .net vb.net exception-handling

捕获异常然后抛出另一个异常是一个好主意吗?

像这样:

Try
    ' Do operation xxx
Catch ex As Exception
    ' Operation xxx failed, need to execute cleanup
    ' But now I've caught this exception outside of my main control logic, 
    ' so I would like to re-throw it
    Throw New ApplicationException("XXX failed")
End Try
Run Code Online (Sandbox Code Playgroud)

这样做的原因是,当我在更高级别的逻辑上捕获异常时(为了确保我可以正确记录它),我需要在异常情况下执行一些操作,我只能在我的类/函数中执行.

你能想出为什么这会是一个坏主意的原因/场景吗?

Joh*_*ers 10

是的,这是一个坏主意.

首先,不要捕获异常以执行清理.使用Finally块,因为无论是否发生异常都将执行.你也不需要抛出一个新的例外只是为了说"XXX失败".堆栈跟踪将显示.

其次,不要使用ApplicationException.微软曾经建议用户定义的异常来自ApplicationException,但结果却是一个坏主意.他们现在建议我们使用Exception.

最后,当您因为旧的异常而抛出新异常时,请务必包含旧异常:

Throw New Exception("My new message", ex)
Run Code Online (Sandbox Code Playgroud)

  • 你可以'扔'. (3认同)