如果没有在catch块中进行额外处理,try-catch-rethrow的原因是什么?

时间:2013-06-18 06:09:28

标签: c# .net try-catch

有时我会遇到以下构建探索ServiceStack的代码库:

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

在我看来,这种结构什么都不做。这样做的可能原因是什么?

2 个答案:

答案 0 :(得分:8)

你是对的 - 这通常毫无意义。我已经看到人们将它包含在内,以便他们可以在throw行上设置一个断点(这样他们就可以看到抛出异常的时候,即使他们没有打破一般的异常)。不幸的是,在调试会话结束后,它经常会留在那里。

如果您在您控制的代码库中遇到此问题,我建议您将其删除。

答案 1 :(得分:2)

上次我偶然发现了这样一个构造,我问作者为什么。为什么我特别好奇的是,他并没有这样做,只是在几个地方。

他的反应伴随着'让异常成为特殊',我猜他必须从Eric Lippert那里得到答案,他补充说他的大部分方法都会(或者应该)永远不会抛出他的代码可以抛出的某些地方。通过添加try / catch / throw,他正在向维护者传达他已经认识到这可能发生的事情。

当然,我们尝试编写根本不会爆炸的代码。例如,通过使用代码约定,实际可以抛出的方法数量会大大减少。