扔进一个应该是无法到达的地方的正确例外是什么?

时间:2012-03-11 20:13:32

标签: .net exception

例如,

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之间;其他一切都表明这个类中有一个错误。换句话说,如果异常触发,则永远不会调用者的错误,但总是该类的作者。

在这种情况下投掷的正确例外是什么?

4 个答案:

答案 0 :(得分:3)

<强>被修改

没有适合这种情况的良好默认CLR异常。你应该自己动手。我直接从异常派生,因为您可能不希望此错误与其他类型的错误混淆。

在某些情况下,程序可以从这种看似无法恢复的情况中恢复:如果您可以确定此类中的问题无法传播到其他地方。例如,当您将此类用作没有副作用的函数的一部分时。这似乎是一个人为的例子,但是当你故意编写或打包代码时它不会产生副作用。

我认为你不应该像退出程序那样做一些激烈的事情(正如另一个现在删除的答案中所建议的那样)。作为一个不是你的责任的班级作者。

作为使用此类的软件的作者,我希望有机会告诉用户发生了一些不好的事情,尝试保存备份,记录信息,将内容写入数据库....你得到了图片。

答案 1 :(得分:2)

在Java中,我会使用AssertionError

答案 2 :(得分:2)

由于错误是由错误状态引起的,因此请使用InvalidOperationException。如果number是被调用方法的参数,我会抛出一个ArgumentException

答案 3 :(得分:0)

我还会放入InvalidOperation,并解释出现了什么问题。

我有各种内部枚举,不应该由外部类使用,但可以读取。 所以在属性集中我返回InvalidOperation异常,它很有意义,并且很容易找到。