为什么只是再次抛出一个异常?

Ste*_*fan 13 vb.net web-services exception-handling exception

在webservice中,我看到了这段代码:

<WebMethod()> _
Public Function dosomething() As Boolean
    Try
        If successful Then
            Return True
        Else
            Return False
        End If
    Catch ex As Exception
        Throw ex
    End Try
End Function
Run Code Online (Sandbox Code Playgroud)

捕获异常并再次抛出异常有什么意义?我错过了什么吗?

编辑:谢谢你的回答!我认为这是类似的东西,但不确定我是否能够/将重构那些没有任何影响的人.

GEO*_*HET 44

不要这样做.

如果你确实需要重新抛出异常,只是用throw;使用throw ex;擦除堆栈跟踪,是绝对错误的.

  • 将我自己的语义添加到异常中.防爆.我得到一个SqlException,因为我尝试插入一个具有重复主键的行.在我的方法中,我知道插入了什么类型的对象和键值.我可以写一个更好的异常消息,但仍保留所有信息. (5认同)

Jac*_*yan 14

我认为没有理由为功能做这件事.但是,如果之前存在一些已删除的错误处理(通常是日志记录),并且开发人员删除了日志处理但未重构代码以删除冗余的try/catch,则可能会出现这种情况.


tva*_*son 5

可能是调试遗留下来的一些代码(你在throw上设置一个断点,这样你就可以检查调试器中的异常).如果我想记录异常然后将其传递给链,我可能会做类似这样的事情,尽管我可能将异常包装在另一个具有更有意义(对我的应用程序)错误消息的异常中.


jim*_*jim 5

我可以看到它所使用的架构(设计模式)之一是处理事务的地方。该函数完成其工作,失败,catch 块将事务完成到已知状态(通常是回滚),然后抛出用户定义的异常。

按照现在的情况,将该代码重构为更理智的状态。