尝试捕获并重新抛出异常

Cam*_*ker 1 c# exception try-catch rethrow

前几天我在一个使用try catch的项目中看到了一些代码,并重新抛出了这样的捕获异常:

try
{
    exceptionProneCode();
}
catch(Exception ex)
{
    throw ex;
}
Run Code Online (Sandbox Code Playgroud)

catch块中的异常没有做任何事情,所以我甚至不确定它为什么会被重新抛出.实际上再次抛出相同的异常并对异常做任何事情都没有任何好处.

如果你重新抛出catch块中捕获的异常,C#如何处理这个?是否会陷入无限投掷/捕获循环?或者它最终会离开尝试捕获?

Ali*_*eza 10

考虑这两个模型:

1-通过重新throwing ex:

catch(Exception ex)
{
    throw ex;
}
Run Code Online (Sandbox Code Playgroud)

您疏松StackTrace.如果在exception某处记录StackTrace了调用堆栈的包含的直接帧(方法调用的历史记录)丢失.

2-相比之下throw:

catch(Exception ex)
{
    // do something here
    throw;
}
Run Code Online (Sandbox Code Playgroud)

你保持StackTrace.您可以执行其他处理,然后重新抛出而exception不会丢失跟踪字符串.

  • 一种常见的情况是,如果你要在异常周围放置一个包装器并将原始异常作为InnerException抛出`throw new MyCustomException("some some information",ex);` (3认同)