在try块中抛出异常有什么问题吗?

时间:2012-05-14 18:41:55

标签: c#

如下编码try-catch块是一种很好的设计做法吗?也就是说,在try块中使用throw,然后在catch块中捕获它。

try
{
  if (someCondition){

      throw new Exception("Go the the associated catch block!");

     }
}

catch(Exception ex)
{
      logError("I was thrown in the try block above");
}

6 个答案:

答案 0 :(得分:3)

有时您可能想要 - 例如,如果您使用的是ado.net,它习惯将所有内容作为SqlException投放 - 您可能希望抓住其中的一些,并处理它们,同时将其他人的处理留到另一个层次。在这种情况下,您必须捕获SqlException,看看是否可以处理它,如果没有则重新抛出它。

答案 1 :(得分:3)

例外情况适用于例外。它不应该用作流逻辑的控制,但是如果有一个边缘情况需要处理,如果确实出现了,那么这样做是没有错的。

如果我正在阅读的数据不符合我的预期,我自己在代码中抛出了InvalidDataException

答案 2 :(得分:2)

一般来说,如果它是最短的可写方法,那么设计也不错。但要注意,抛出一个兴奋通常需要大约1毫秒来捕获。在这个问题上,这是一个性能问题。

答案 3 :(得分:1)

这取决于你应该在通常的情况下抛出异常,并且更好的是你自己的例外,而不是一般的例外。

答案 4 :(得分:1)

这完全取决于你想要达到的目标。总的来说,最好避免过度使用try-catch块,尤其是因为它们很慢。大量的try-catch块可能会使您的代码看起来很乱,很难遵循。

您需要考虑为什么会抛出异常,是意外错误,错误还是预期错误?如果它是预期的错误,那么你应该尝试围绕它进行编码,而不使用try-catch。

答案 5 :(得分:1)

如果someCondition表示真正的错误状态,那么是。这没有问题。但是,请不要用它来控制程序流程。当一个人可以退出范围时,没有什么比看到抛出的异常更让我疯狂了。它还有可能危及代码中对实际异常的正确处理。