可能重复:
为什么在C#中捕获并重新抛出异常?
我有时会遇到如下所示的C#代码:
try
{
// Some stuff
}
catch (Exception e)
{
throw e;
}
Run Code Online (Sandbox Code Playgroud)
我理解它可以做一些事情,比如记录异常消息,然后重新抛出它.我在谈论只能重新抛出异常的问题.我没有看到这一点.我有三个问题:
1)这有什么好处
2)这根本不会使代码变得缓慢
3)如果捕获块如下,它会有什么不同:
catch (Exception)
{
throw;
}
Run Code Online (Sandbox Code Playgroud)
And*_*are 20
这会重新抛出完全相同的异常:
catch (Exception)
{
throw;
}
Run Code Online (Sandbox Code Playgroud)
而这会在没有原始堆栈跟踪的情况下重新抛出异常:
catch (Exception e)
{
throw e;
}
Run Code Online (Sandbox Code Playgroud)
throw;由于您可以在重新抛出异常之前记录异常或执行其他操作,因此通常有充分的理由.我不知道有什么好的理由,throw e;因为你会消除有价值的堆栈跟踪信息.
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |