如果我想构建我的业务逻辑,通过抛出自定义异常或添加特定的“If”条件以避免特定情况来处理逻辑是否更好?
例如(愚蠢但很简单的例子):
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;
我知道这个例子看起来很愚蠢,但是在大量具有更多逻辑的代码中,我应该使用更多条件来避免使用多个try catch吗?
提前致谢!
答案 0 :(得分:3)
简单地说,我建议不要使用异常来控制程序的流程。当没有其他选项可以解决问题时,您应该引发异常,而不是仅仅为了返回结果或其他选项而跳转到程序的特定点。例外情况仅适用于“特殊”或意外情况。这样做有点像写goto
。除此之外,它们是昂贵的物体,可能对性能产生重大影响。请参阅“.NET Framework性能规则”一书中有关MSDN“Avoid using exceptions for control flow”的文章。
答案 1 :(得分:1)
这两种方式都是有效的,它实际上取决于代码负责的其他方式。
首先,当它是例外时,没有合理的方法可以继续。虽然给出了您的示例,但您通常不会在1个方法中抛出并捕获自己的异常。通常你需要它,这样你就可以将调用链解除到可以处理失败的程度。
第二种方式(如果可以的话,这应该是你的第一个选择)是,如果你能在逻辑上处理错误条件,那就这样做。
此外,第二个选项通常被视为“保护条款”
通常写成: -
if(value == 5) return false;
DoStuffIfValueIsValid();
答案 2 :(得分:0)
如果你无法在检测到它时处理它,你应该尝试只抛出异常
try
{
// some stuff
if (condition)
{
throw new MyException("ooher");
}
}
catch (MyException mex)
{
// undo some stuff
throw;
}