我有一个新项目。每当你与别人打交道时,这都是一次冒险。
这是我发现的:
try
{
.....
}
catch (InvalidOperationException e) {
throw e;
}
catch (Exception e)
{
throw;
}
有人知道为什么吗?
PS 谢谢大家。 这真的有帮助。 以下是您推荐的一些好消息来源:
Why catch and rethrow an exception in C#?
答案 0 :(得分:3)
因为无论谁写了这篇文章,都不了解异常如何在.NET中运行。
如果您没有执行任何异常,请不要抓住它。
您发布的代码最好写成:
.....
答案 1 :(得分:2)
对我没有任何意义,但不是因为你可能会想到的原因。
捕获异常与处理它不是一回事。这个try / catch块根本不处理。我认为一个更好,更诚实,更简洁的解决方案就是删除try / catch,让异常泡到他们可以/应该处理的地方。
答案 2 :(得分:2)
这个的真正危险(除了完全没用......)是它修改了调用堆栈。其他人在评论中简要提到过,但值得特别提及。
当你有throw ex;
时,前一个调用堆栈被吹走,并在调用throw ex;
的位置被调用堆栈替换。你几乎不想这样做。我经常会捕获异常,记录它,然后重新抛出异常。这样做时,您只想使用throw;
。这将保留原始堆栈跟踪。
答案 3 :(得分:1)
我想应用程序希望外部方法调用此方法来捕获异常,但这不是它应该完成的方式,请检查这些引用,因为它们有点类似
答案 4 :(得分:1)
他们可能希望对InvalidOperationException和其他类型的异常实现不同的处理,因此他们将此代码编写为存根。但后来这个想法被放弃了,所以你看到了这个代码工件。
答案 5 :(得分:0)
您可以通过添加日志记录来改进此代码。
每次捕获后,记录您抛出的信息。
有一些开源代码可用于记录。