有什么情况下可以避免throw错误是一个好主意吗?
我特别想到的是DivideByZeroException和ArgumentNullException
例如:
double numerator = 10;
double denominator = getDenominator();
if( denominator == 0 ){
throw new DivideByZeroException("You can't divide by Zero!");
}有理由抛出这样的错误吗?
注意:--我说的不是捕获这些错误,特别是知道是否有好的理由抛出这些错误。
只是为了重申
我知道,在我给出的示例中,处理错误可能会更好。也许这个问题应该重新措辞。是否有任何理由throw其中一个错误,而不是处理它在这个位置。
发布于 2010-04-08 15:57:49
假设您编写了一个库来处理不适合于Int64的非常大的整数,那么您可能需要为您编写的除法算法抛出DivideByZeroException。
发布于 2010-04-08 15:56:57
.NET运行时已经非常擅长抛出这些异常。它们也是对错误的高度描述,您不能对异常消息添加任何好的评论。“你不能除以零”没有增加任何价值。
但是,您可以通过筛选客户端代码传递的值来避免这些异常。如果客户端代码传递的是null,则需要具有参数名的ArgumentNullException,当它传递可能会触发DivideByZero的内容时,它将传递一个ArgumentException。
发布于 2010-04-08 16:04:39
这样做绝对是有原因的,就像大多数情况下抛出的问题一样,你必须把自己看作是一个团队中的开发人员。您正在编写的内容可能是另一个系统的一部分,也可能是一个库或组件。
如果您编写了一个数学库,并有一个名为Divide(int a, int b)的函数将它们分开,如果其他人想使用您的方法并将其传递为零,那么您将希望抛出一个异常,以便他们,作为一个开发人员,知道他们搞砸了。
如果不抛出异常,则会在代码中引入bug。如果我使用您的divide方法,并将值10和0放入其中,这将产生10/0,从而产生异常,唯一正确的答案是错误。如果您决定更改值,这样就不会发生错误,或者返回0,这不是我所期望的--我假设我的部门工作得很好,从来没有注意到问题。我很可能把它取出来,然后用在其他的计算中,不知道它是错误的答案,因为10/0不是0。
https://stackoverflow.com/questions/2601350
复制相似问题