例如,
switch (number)
{
case 1: return DoOne();
case 2: return DoTwo();
case 3: return DoThree();
case 4: return DoFour();
default:
throw new ???Exception("Unexpected number encountered.");
}
为了这个问题,请假设:
number
是班级中的私人字段
这是一个类不变量,number
应始终在1到4之间;其他一切都表明这个类中有一个错误。换句话说,如果异常触发,则永远不会调用者的错误,但总是该类的作者。
在这种情况下投掷的正确例外是什么?
答案 0 :(得分:3)
<强>被修改强>
没有适合这种情况的良好默认CLR异常。你应该自己动手。我直接从异常派生,因为您可能不希望此错误与其他类型的错误混淆。
在某些情况下,程序可以从这种看似无法恢复的情况中恢复:如果您可以确定此类中的问题无法传播到其他地方。例如,当您将此类用作没有副作用的函数的一部分时。这似乎是一个人为的例子,但是当你故意编写或打包代码时它不会产生副作用。
我认为你不应该像退出程序那样做一些激烈的事情(正如另一个现在删除的答案中所建议的那样)。作为一个不是你的责任的班级作者。
作为使用此类的软件的作者,我希望有机会告诉用户发生了一些不好的事情,尝试保存备份,记录信息,将内容写入数据库....你得到了图片。
答案 1 :(得分:2)
在Java中,我会使用AssertionError。
答案 2 :(得分:2)
由于错误是由错误状态引起的,因此请使用InvalidOperationException
。如果number
是被调用方法的参数,我会抛出一个ArgumentException
。
答案 3 :(得分:0)
我还会放入InvalidOperation,并解释出现了什么问题。
我有各种内部枚举,不应该由外部类使用,但可以读取。 所以在属性集中我返回InvalidOperation异常,它很有意义,并且很容易找到。