有时我会遇到以下构建探索ServiceStack的代码库:
try
{
...
}
catch (Exception)
{
throw;
}
在我看来,这种结构什么都不做。这样做的可能原因是什么?
答案 0 :(得分:8)
你是对的 - 这通常毫无意义。我已经看到人们将它包含在内,以便他们可以在throw
行上设置一个断点(这样他们就可以看到抛出异常的时候,即使他们没有打破一般的异常)。不幸的是,在调试会话结束后,它经常会留在那里。
如果您在您控制的代码库中遇到此问题,我建议您将其删除。
答案 1 :(得分:2)
上次我偶然发现了这样一个构造,我问作者为什么。为什么我特别好奇的是,他并没有这样做,只是在几个地方。
他的反应伴随着'让异常成为特殊',我猜他必须从Eric Lippert那里得到答案,他补充说他的大部分方法都会(或者应该)永远不会抛出他的代码可以抛出的某些地方。通过添加try / catch / throw,他正在向维护者传达他已经认识到这可能发生的事情。
当然,我们尝试编写根本不会爆炸的代码。例如,通过使用代码约定,实际可以抛出的方法数量会大大减少。