gpt4 book ai didi

c# - 抛出无效对象状态的异常是什么?

转载 作者:IT王子 更新时间:2023-10-29 04:00:10 25 4
gpt4 key购买 nike

<分区>

我总是错过 c# 中的内置异常类型,它表明对象已损坏。在这种情况下你会抛出什么?

通常,当我意识到如果对象具有特定状态,应该对对象起作用的方法将失败时,我就会想念它。在这种情况下,我经常怀疑可能永远不会达到这种状态。但是为了防御它,我想抛出一个异常以防万一(例如在未来的代码更改之后)。

对于方法参数,我们有 ArgumentException,因此我们可以拒绝无效参数。但是对于对象状态?在 Java 中,我会使用 IllegalStateException

当然,您可以争辩说,实际上改变状态的方法可以检查状态的正确性。他们最好应该这样做,但如果他们不这样做(比如在传统的上帝类(class)中)?

编辑:

尽管 InvalidOperationException 似乎是最合适的,因为已接受的答案指出(以及 this one ),请注意:

它很微妙,但在语义上这与 InvalidOperationException 具有不同的含义。 InvalidOperationException 表示对象的“协议(protocol)”中存在问题,调用者必须遵守(例如未初始化、已经关闭等)。在我的例子中,调用者没有做错任何事,是对象被破坏了。我想准确传达该信息。

例子:

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);
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com