如果我遇到非法状态,我应该抛出什么异常 - 例如,一个只应该被调用一次的初始化方法?我真的没有看到任何有意义的内置异常。这似乎应该在框架中 - 我不是在正确的位置戳?
答案 0 :(得分:68)
方法调用对于对象的当前状态无效时引发的异常。
答案 1 :(得分:0)
通常,您应以不能达到无效状态的方式编程对象。如果发现对象处于无效状态,则应该抛出SystemException
或从SystemException
直接派生的异常 。这是标题中 问题的答案。
但是,您在问题文本中引用的特殊情况是对象的用户将其推到非法状态。在那种情况下,InvalidOperationException
是正确的抛出异常,如this earlier answer所示。这样可以避免您的对象进入非法状态。
不用说,您需要文档应如何使用您的对象。如果您的对象的预期寿命很长,或者在不同对象之间使用/共享它,那么用户可以请求当前状态并实现ToString
以文本形式获取当前状态,这是很好的选择,例如在调试环境/日志中。
答案 2 :(得分:-3)
如果有的话,我会说System.InvalidProgramException最接近你想要的。抛出自定义异常有什么问题?