1

如果我想构建我的业务逻辑,通过抛出自定义异常或添加特定的“如果”条件以避免特定情况来处理逻辑是更好的做法吗?

例如(愚蠢但简单的例子来说明问题):

var success = true;
try{

   if(value == 5){
      throw new CustomException("Invalid Value!");
   }

   DoStuffIfValueIsValid();

}catch(CustomException e){
   success = false;  
}

return success;

VS

var success = true;    

if(value == 5){
   success = false;
} else {
   DoStuffIfValueIsValid();
}
return success;

我知道这个例子看起来很愚蠢,但是在逻辑更多的大规模代码中,我应该使用更多的条件来避免使用多次尝试捕获吗?

提前致谢!

4

3 回答 3

3

简单地说,我建议不要使用异常来控制程序的流程。当没有其他选项可以解决问题时,您应该引发异常,而不是为了返回结果或其他结果而跳转到程序的特定点。例外是为“异常”或意外情况保留的。这样做有点像写一个goto. 除此之外,它们是可能对性能产生重大影响的昂贵对象。请参阅NET Framework 性能规则书中MSDN 上的这篇文章“避免对控制流使用异常”。

于 2013-06-13T21:22:42.073 回答
1

两种方式都是有效的,它实际上取决于该代码还负责什么。

第一个是当它非常特殊时,没有合乎逻辑的方法可以继续。尽管给出了您的示例,但您通常不会在 1 种方法中抛出并捕获自己的异常。通常您需要它,以便您可以将调用链展开到可以处理故障的程度。

第二种方式(如果可以的话,这应该是您的第一个选择)是,如果您可以在逻辑上处理错误情况,请这样做。

此外,第二个选项通常作为“保护条款”处理

通常写成:-

if(value == 5) return false;
DoStuffIfValueIsValid();
于 2013-06-13T21:22:48.287 回答
0

如果在检测到异常时无法处理,则应尝试仅抛出异常

try
{
  // some stuff 
  if (condition)
  {
     throw new MyException("ooher");
  }
}
catch (MyException mex)
{
   // undo some stuff
   throw;
}
于 2013-06-13T21:45:25.130 回答