我有一些代码,它捕获异常,回滚事务,然后重新抛出异常。
catch ( Exception exSys ) {
bqBusinessQuery.RollBackTransaction();
throw exSys ;
}
如果我使用这段代码,VS Code分析会发出警告:
使用没有参数的'throw',以保留最初引发异常的堆栈位置。
如果我使用此代码:
catch ( Exception exSys ) {
bqBusinessQuery.RollBackTransaction();
throw;
}
然后我收到一个警告:
变量'exSys'已声明但未使用
我应该如何解决这个问题?
编辑:我尝试了这种方法,但它不起作用。system.exception类需要额外的消息和内部异常。如果我这样做,它会抛出一个新的消息,覆盖原始异常的消息。我不想得到新异常,我想抛出同样带有相同消息的异常。
catch (System.Exception ex)
{
throw new System.Exception(ex);
}
编辑
catch (System.Exception ex)
{
throw new System.Exception("Test",ex);
}
尝试了这种方法。然后手动使用
throw new Exception("From inside");
引发异常。现在,ex.Message返回的是“Test”,而不是“From inside”。我希望保留“From inside”消息。这个建议的更改将导致错误显示代码出现问题。 :/
throw new Exception("custom message");
。然后将该消息转发给最外层的调用函数,以便更新用户界面以显示错误信息。 - jitendragargthrow new exception("自定义消息", originalException)
,这样就不会丢失堆栈跟踪。 - Kyle Muircatch (System.Exception ex) { throw new System.Exception(ex); }
不起作用。它给我一个错误,说最佳重载方法具有无效的参数。它确实需要一个错误消息。 - jitendragargcatch (Exception ex) { throw new Exception(ex.Message, ex); }
,不过值得思考的是:如果你抛出一个带有与原始异常相同信息的新异常 - 你为什么要这样做呢? - Kyle Muir