我应该抛出哪种异常来表示程序中的内部错误?

eri*_*len 20 .net c# exception

当程序达到我"知道"不会发生的逻辑状态时,我应该使用哪个例外,如果确实如此,那么事情就非常糟糕.

例如:

int SomeFunction(int arg) {
    SomeEnum x = Whatever(arg, somePrivateMember);
    switch (x) {
        case SomeEnum.Value1:
            return SomeFunction1();
        case SomeEnum.Value1:
            return SomeFunction2();
        default:
            throw new WhatTypeToThrow();
    }
}
Run Code Online (Sandbox Code Playgroud)

很明显,ArgumentException在这里是一个长镜头,因为x的无效值可能来自Whatever()中的错误,或者任何参数和/或当前实例状态的无效组合.

我正在寻找诸如InvalidProgramStateException,InternalErrorException或类似的东西.

当然我可以定义自己的,但我想知道框架中是否有合适的例外.

编辑:删除简单的示例代码以减少ArgumentException答案的数量.

Mar*_*sen 5

那InvalidOperationException呢?

  • 我有时会用那个,但我认为该异常表示“您无法执行此操作”,而我想说的是“您应该能够执行此操作,但是有一个错误”。 (5认同)