【发布时间】:2013-10-04 03:40:00
【问题描述】:
前几天我在我们的一个项目中看到了一些代码,它使用 try catch 并重新抛出捕获的异常,如下所示:
try
{
exceptionProneCode();
}
catch(Exception ex)
{
throw ex;
}
catch 块中的异常没有做任何其他事情,所以我什至不确定它为什么会被重新抛出。我看不出实际上再次抛出相同的异常并且对异常什么都不做有什么好处。
如果重新抛出在 catch 块中捕获的异常,C# 是如何处理的?它会陷入无限的抛出/捕获循环吗?还是它最终会离开 try catch?
【问题讨论】:
-
有没有可能
finally和catch?也许有人出于习惯不小心包含了catch? (可以希望)一个可能的好处是逐步调试可以打破捕获(不提倡!我可能会用额外的数据包装并重新抛出新链。) -
不,
catch中不包含finally。我只是不完全理解为什么要重新抛出捕获的异常。我现在对此有了更好的了解。 -
我怀疑这样做是为了可以放置一个断点来查看异常。这是一个可能的优势,而丢失堆栈跟踪通常不是优势。正如其他人所指出的,应该使用 throw 而不是 throw ex(常见错误)。
标签: c# exception try-catch rethrow