.net - 从异常捕获中重新抛出异常

标签 .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

这样做的原因是,当我在更高级别的逻辑上捕获我的异常(以确保我可以正确记录它)时,我需要在发生异常时执行一些只能在我的内部执行的操作类/函数。

你能想出这不是一个好主意的任何原因/场景吗?

最佳答案

是的,这是个坏主意。

首先,不要为了执行清理而捕获异常。为此使用 Finally block ,因为无论是否发生异常都会执行它。您也不需要为了说“XXX 失败”而抛出新的异常。堆栈跟踪将显示这一点。

其次,不要使用ApplicationException。 Microsoft 曾经建议用户定义的异常派生自 ApplicationException,但事实证明这是个坏主意。他们现在建议我们只使用 Exception

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

Throw New Exception("My new message", ex)

关于.net - 从异常捕获中重新抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4996726/

相关文章:

.net - 以编程方式禁用 Windows 错误报告 (AppCrash) 对话框

c# - Winforms:如何在透明窗体上获取鼠标事件以进行透明控制

vb.net - 找不到名为的列。参数名称

javascript - 单击事件时将数据从 javascript 传递到 asp.net

java - 有没有更好的方法来捕获异常的特定原因?

python - 使用 PyObjC 以正常方式打印 python 异常

android - 尽管尝试了教程,但蓝牙设备未连接到 Android 应用程序

c# - protobuf-net 使用 DynamicType 序列化 System.Object 抛出异常

c# - MVC Ajax 表单返回 View 的全部内容

asp.net - 更新面板错误 : Control with the ID "xxx" could not be found in the UpdatePanel