C#-围绕抛出自定义异常或处理案例构建逻辑更好吗?
如果我想构建我的业务逻辑,那么通过抛出自定义异常或添加特定的“如果”条件来避免特定情况来处理逻辑是更好的做法吗 例如(愚蠢但简单的例子来说明问题): VS 我知道这个例子看起来很愚蠢,但是在一个包含更多逻辑的大规模代码中,我应该使用更多的条件来避免使用多个try-catch吗C#-围绕抛出自定义异常或处理案例构建逻辑更好吗?,c#,exception,try-catch,handle,C#,Exception,Try Catch,Handle,如果我想构建我的业务逻辑,那么通过抛出自定义异常或添加特定的“如果”条件来避免特定情况来处理逻辑是更好的做法吗 例如(愚蠢但简单的例子来说明问题): VS 我知道这个例子看起来很愚蠢,但是在一个包含更多逻辑的大规模代码中,我应该使用更多的条件来避免使用多个try-catch吗 提前谢谢 简单地说,我建议不要使用异常来控制程序流。当没有其他选项来解决问题时,您应该引发异常,而不是跳转到程序的某个特定点,只是为了返回一个或另一个结果。例外情况是为“例外”或意外情况保留的。这样做有点像编写一个goto
提前谢谢 简单地说,我建议不要使用异常来控制程序流。当没有其他选项来解决问题时,您应该引发异常,而不是跳转到程序的某个特定点,只是为了返回一个或另一个结果。例外情况是为“例外”或意外情况保留的。这样做有点像编写一个
goto
。除此之外,它们是昂贵的对象,可能会对性能产生重大影响。请参阅NET Framework性能规则手册中有关MSDN“”的这篇文章。简单地说,我建议不要使用异常来控制程序流。当没有其他选项来解决问题时,您应该引发异常,而不是跳转到程序的某个特定点,只是为了返回一个或另一个结果。例外情况是为“例外”或意外情况保留的。这样做有点像编写一个goto
。除此之外,它们是昂贵的对象,可能会对性能产生重大影响。请参阅NET Framework性能规则手册中有关MSDN“”的这篇文章。这两种方法都是有效的,这实际上取决于该代码还负责什么
第一个是当它是例外的时候,就没有合乎逻辑的方式继续下去。尽管给出了您的示例,您通常不会在1方法中抛出并捕获自己的异常。通常情况下,您需要它,这样您就可以将呼叫链展开到可以处理故障的位置
第二种方法(如果可以的话,这应该是您的第一个选择)是,如果您可以逻辑地处理错误条件,那么就这样做
此外,第二种选择通常被视为“保护条款”
通常是这样写的:-
if(value == 5) return false;
DoStuffIfValueIsValid();
这两种方法都是有效的,这实际上取决于代码还负责什么 第一个是当它是例外的时候,就没有合乎逻辑的方式继续下去。尽管给出了您的示例,您通常不会在1方法中抛出并捕获自己的异常。通常情况下,您需要它,这样您就可以将呼叫链展开到可以处理故障的位置 第二种方法(如果可以的话,这应该是您的第一个选择)是,如果您可以逻辑地处理错误条件,那么就这样做 此外,第二种选择通常被视为“保护条款” 通常是这样写的:-
if(value == 5) return false;
DoStuffIfValueIsValid();
只有在检测到异常时无法处理异常时,才应尝试抛出异常
try
{
// some stuff
if (condition)
{
throw new MyException("ooher");
}
}
catch (MyException mex)
{
// undo some stuff
throw;
}
只有在检测到异常时无法处理异常时,才应尝试抛出异常
try
{
// some stuff
if (condition)
{
throw new MyException("ooher");
}
}
catch (MyException mex)
{
// undo some stuff
throw;
}
你为什么不立即返回
false
?在这个简单的代码中,是的,我同意,不简单地返回false
,而是如果在dostuffvalueisvalid()中返回该怎么办代码>还有其他逻辑抛出自定义异常
?问题更多的是在这个意义上:用异常抛出来控制逻辑是错误的吗?或者我应该完全改变逻辑来使用更多的if条件吗?那么我仍然会在您知道需要返回false的地方返回false。它清楚地表明了您试图实现的目标。为什么不立即返回false
?在这个简单的代码中,是的,我同意,如果不简单地返回false
,那将是愚蠢的,但是如果在dostuffivvalueisvalid()中代码>还有其他逻辑抛出自定义异常
?问题更多的是在这个意义上:用异常抛出来控制逻辑是错误的吗?或者我应该完全改变逻辑来使用更多的if条件吗?那么我仍然会在您知道需要返回false的地方返回false。它清楚地表明了你想要达到的目标。谢谢你,说得好。这正是我不确定的谢谢你,说得好。这正是我不确定的