我应该使用Try Catch Block来实现我的业务逻辑吗?

时间:2013-03-18 04:47:22

标签: c# java c++

假设我需要这样的东西。(这段代码很大,但只是一个例子)。这段代码不是我的问题!这只是一个例子。我知道如何使用if else语句编写它。我正在考虑一个更复杂的背景!

int[] arraynums = new int[3] {1,2,3};
int Sample = 0;
try
{
Sample = arraynums[3];
}
catch
{
Sample=4;
}

在这里,我可以使用一种不会遇到错误的替代逻辑。但是如果我使用try catch块,我仍然可以减少代码。是否建议使用try catch块来解决逻辑?如果不是,为什么呢?

4 个答案:

答案 0 :(得分:5)

由于以下原因,您不应该使用异常来实现业务逻辑(或流控制):

  • 这不是一个好习惯。这会让其他开发者感到困惑,即使你在6个月后也会感到困惑。(这违反了PrincipleOfLeastAstonishment。这使得程序员更难阅读。)
  • 例外费用很高。
  • 糟糕的设计。

其他帖子中提供了相当多的资料:

关于它的整个维基:http://c2.com/cgi/wiki?DontUseExceptionsForFlowControl

答案 1 :(得分:3)

为什么不使用if语句?

if(arraynums.length > 3)
{
    Sample = arraynums[3];
}
else
{
    Sample = 4;
}

答案 2 :(得分:3)

我假设你的代码是相当人为的,因为很容易在没有例外的情况下重写它。运行时的异常相对昂贵。如果被滥用,它们可能会不必要地减慢您的代码速度。通常,您应该在允许抛出之前检查异常情况。

推荐阅读:

答案 3 :(得分:0)

就我个人而言,我只会使用try catch来处理错误,或者在您不确定该对象是否在运行时可用的情况下。

在您的代码中,最好将Sample = 4设置为默认值,并在将其设置为arraynums [3]之前进行检查。