Igo*_*kin 40 .net c# exception
我总是错过c#中的内置异常类型,这表示对象已损坏.你在这种情况下扔了什么?
通常我会想念它,当我意识到一个应该在一个对象上工作的方法,如果该对象具有某种状态就会失败.在这种情况下,我经常怀疑这种状态可能永远不会达到.但是对它采取防御措施,我想抛出异常以防万一(例如在未来的代码更改之后).
对于方法参数ArgumentException,我们可以拒绝无效参数.但对于对象状态?在Java中我会使用IllegalStateException.
当然,你可以争辩说,实际改变状态的方法可以检查状态的正确性.而且他们应该更好,但如果他们不这样做(比如传统的上帝班)?
编辑:
虽然InvalidOperationException似乎是最合适的,但正如公认的答案所述(以及这一个),请注意:
它很微妙,但在语义上它有不同的含义InvalidOperationException.InvalidOperationException表示对象的"协议"中的问题,调用者必须遵守该问题(例如,未初始化,已关闭,......).在我的情况下,调用者没有做错任何错误,它是被破坏的对象.我想准确传输那条消息.
例:
switch(this._someType) {
case SomeType.A: doSomething(); break;
case SomeType.B: doSomethingElse(); break;
/*...*/
default:
// Unexpected type! Someone introduced a new type and didn't update this.
throw new IllegalStateException("Unknown type "+this._someType);
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*son 40
您应该抛出InvalidOperationException以指示对象具有无效状态.
从MSDN文档(上面链接):
方法调用对于对象的当前状态无效时引发的异常.