Exception 关于异常/流控制和自定义异常应用的几个问题

Exception 关于异常/流控制和自定义异常应用的几个问题,exception,exception-handling,Exception,Exception Handling,1) 自定义异常有助于明确您的意图 这怎么可能?其目的是处理或记录异常,而不管该类型是内置的还是自定义的 我使用自定义异常的主要原因是在不同的上下文中不使用一种异常类型来覆盖相同的问题(例如,系统代码中的参数为null,这可能受到外部因素和空购物篮的影响)。然而,系统和业务域代码之间的划分以及使用不同的异常类型似乎非常明显,并且没有充分利用自定义异常。与此相关,如果自定义异常包括业务异常,我还可以使用“查找所有引用”在业务域级别获取异常源的所有位置。如果您检查方法中的参数是否为null,使用它们

1) 自定义异常有助于明确您的意图

这怎么可能?其目的是处理或记录异常,而不管该类型是内置的还是自定义的

我使用自定义异常的主要原因是在不同的上下文中不使用一种异常类型来覆盖相同的问题(例如,系统代码中的参数为null,这可能受到外部因素和空购物篮的影响)。然而,系统和业务域代码之间的划分以及使用不同的异常类型似乎非常明显,并且没有充分利用自定义异常。与此相关,如果自定义异常包括业务异常,我还可以使用“查找所有引用”在业务域级别获取异常源的所有位置。如果您检查方法中的参数是否为null,使用它们几次,然后添加捕获,那么添加异常是否值得?外部因素或其他异常原因可能导致参数在被检查后为空,这是一种现实的风险吗

2) 当不应使用异常来控制程序流时,它意味着什么?为什么不?我假设这是这样的:

if (exceptionVariable != null)
{

}

在异常对象中填充每个变量通常是好的做法吗?作为一名开发人员,您是否希望每一个可能的变量都由另一个编码人员填充?

我不确定是否理解您的第一点,但第二点意味着您不应该使用异常来编写这样的代码:

try {
   if ( something ) {
       stuff();
      if ( something else ) {
          throw 1;
      }
      more_stuff();
   }
}
catch( ... ) {
   yet_more_stuff();
}

在这里,您只是使用异常机制作为一种转到。至于为什么不这样做,我们有gotos,它比例外情况更有效、更清晰。

@dotnetdev在其他人有机会回答之前可能不是一个好主意,特别是因为我只回答了一半的问题。