是否存在指示非法对象状态的内置.NET异常

本文关键字:内置 NET 异常 状态 对象 存在 指示 非法 是否 | 更新日期: 2023-09-27 17:47:49

如果遇到非法状态,我应该抛出什么异常?例如,一个只应该调用一次的初始化方法被第二次调用?我真的看不出任何有意义的内置异常。这似乎是应该在框架中的东西——我不是戳对了地方吗?

是否存在指示非法对象状态的内置.NET异常

可能是InvalidOperationException?

当方法调用对对象的当前状态无效时引发的异常。

通常,您应该以的方式对对象进行编程,使其不能达到无效状态。如果发现对象处于无效状态,则应抛出SystemException或直接从SystemException派生的异常。这是标题问题的答案。

然而,您在问题文本中引用的特殊情况是您的对象中的用户将其推入非法状态。在这种情况下,InvalidOperationException是抛出的正确异常,如前面的回答所示。这将避免您的对象进入非法状态。

不用说,您需要文档您的对象应该如何使用。如果您的对象的预期寿命很长,或者在不同的对象之间使用/共享它,那么用户能够请求当前状态,并实现ToString以文本形式检索当前状态是很好的,例如在调试环境/日志中。

如果我说System.InvalidProgramException最接近你想要的。抛出自定义异常有什么问题?