有时我在探索 ServiceStack 的代码库时遇到以下构造:
try
{
...
}
catch (Exception)
{
throw;
}
在我看来,这种结构没有任何作用。这样做的可能原因是什么?
你是对的——这通常是没有意义的。我见过人们包含它,以便他们可以在行上放置一个断点throw
(这样他们就可以看到何时抛出异常,即使他们通常没有打破异常)。不幸的是,它经常在调试会话完成后留在那里。
如果您在您控制的代码库中遇到此问题,我建议您将其删除。
上次我偶然发现这样一个结构时,我问作者为什么。为什么我特别好奇的是,他并不是一心一意地这样做,而只是在少数地方。
他的回应是“让异常成为例外”,我猜他一定是从 Eric Lippert 那里得到的,他补充说他的大多数方法将/(应该)永远不会抛出他的代码在某些地方可以抛出的地方。通过添加 try/catch/throw,他向维护人员传达了他已经认识到这可能发生的情况。
自然地,我们尝试编写完全不会崩溃的代码。例如,通过使用代码契约,实际可以抛出的方法数量会大大减少。