捕获一个异常然后抛出另一个异常是个好主意吗?
像这样:
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
这样做的原因是,当我在更高级别的逻辑上捕获我的异常(以确保我可以正确记录它)时,我需要在发生异常时执行一些只能在我的内部执行的操作类/函数。
你能想出这不是一个好主意的任何原因/场景吗?
最佳答案
是的,这是个坏主意。
首先,不要为了执行清理而捕获异常。为此使用 Finally block ,因为无论是否发生异常都会执行它。您也不需要为了说“XXX 失败”而抛出新的异常。堆栈跟踪将显示这一点。
其次,不要使用ApplicationException
。 Microsoft 曾经建议用户定义的异常派生自 ApplicationException
,但事实证明这是个坏主意。他们现在建议我们只使用 Exception
。
最后,当您因为旧异常而要抛出新异常时,请务必包含旧异常:
Throw New Exception("My new message", ex)
关于.net - 从异常捕获中重新抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4996726/