在catch部分中抛出异常

时间:2011-05-11 12:36:05

标签: c#

我有一个新项目。每当你与别人打交道时,这都是一次冒险。

这是我发现的:

try
{
   .....
}
catch (InvalidOperationException e) {
    throw e;
}
catch (Exception e)
{
    throw;
}

有人知道为什么吗?

PS 谢谢大家。 这真的有帮助。 以下是您推荐的一些好消息来源:

Why catch and rethrow an exception in C#?

http://msdn.microsoft.com/en-us/library/0yd65esw.aspx

http://msdn.microsoft.com/en-us/library/ms229005.aspx

6 个答案:

答案 0 :(得分:3)

因为无论谁写了这篇文章,都不了解异常如何在.NET中运行。

如果您没有执行任何异常,请不要抓住它。

您发布的代码最好写成:

.....

答案 1 :(得分:2)

对我没有任何意义,但不是因为你可能会想到的原因。

捕获异常与处理它不是一回事。这个try / catch块根本不处理。我认为一个更好,更诚实,更简洁的解决方案就是删除try / catch,让异常泡到他们可以/应该处理的地方。

答案 2 :(得分:2)

这个的真正危险(除了完全没用......)是它修改了调用堆栈。其他人在评论中简要提到过,但值得特别提及。

当你有throw ex;时,前一个调用堆栈被吹走,并在调用throw ex;的位置被调用堆栈替换。你几乎不想这样做。我经常会捕获异常,记录它,然后重新抛出异常。这样做时,您只想使用throw;。这将保留原始堆栈跟踪。

答案 3 :(得分:1)

我想应用程序希望外部方法调用此方法来捕获异常,但这不是它应该完成的方式,请检查这些引用,因为它们有点类似

Why catch and rethrow an exception in C#?

http://winterdom.com/2002/09/rethrowingexceptionsinc

答案 4 :(得分:1)

他们可能希望对InvalidOperationException和其他类型的异常实现不同的处理,因此他们将此代码编写为存根。但后来这个想法被放弃了,所以你看到了这个代码工件。

答案 5 :(得分:0)

您可以通过添加日志记录来改进此代码。

每次捕获后,记录您抛出的信息。

有一些开源代码可用于记录。