如下编码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");
}
答案 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表示真正的错误状态,那么是。这没有问题。但是,请不要用它来控制程序流程。当一个人可以退出范围时,没有什么比看到抛出的异常更让我疯狂了。它还有可能危及代码中对实际异常的正确处理。