2

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

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

在我看来,这种结构没有任何作用。这样做的可能原因是什么?

4

2 回答 2

8

你是对的——这通常是没有意义的。我见过人们包含它,以便他们可以在行上放置一个断点throw(这样他们就可以看到何时抛出异常,即使他们通常没有打破异常)。不幸的是,它经常在调试会话完成后留在那里。

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

于 2013-06-18T06:11:53.860 回答
2

上次我偶然发现这样一个结构时,我问作者为什么。为什么我特别好奇的是,他并不是一心一意地这样做,而只是在少数地方。

他的回应是“让异常成为例外”,我猜他一定是从 Eric Lippert 那里得到的,他补充说他的大多数方法将/(应该)永远不会抛出他的代码在某些地方可以抛出的地方。通过添加 try/catch/throw,他向维护人员传达了他已经认识到这可能发生的情况。

自然地,我们尝试编写完全不会崩溃的代码。例如,通过使用代码契约,实际可以抛出的方法数量会大大减少。

于 2013-06-18T06:46:44.687 回答