【发布时间】:2010-09-20 13:29:48
【问题描述】:
如果我遇到非法状态,我应该抛出什么异常——例如,一个只应该被调用一次的初始化方法被第二次调用?我真的没有看到任何有意义的内置异常。这似乎应该在框架中 - 我是不是在正确的地方戳?
【问题讨论】:
如果我遇到非法状态,我应该抛出什么异常——例如,一个只应该被调用一次的初始化方法被第二次调用?我真的没有看到任何有意义的内置异常。这似乎应该在框架中 - 我是不是在正确的地方戳?
【问题讨论】:
InvalidOperationException 可能吗?
当方法调用对于对象的当前状态无效时引发的异常。
【讨论】:
一般来说,您应该以这样的方式对您的对象进行编程,它不会达到无效状态。如果您发现您的对象处于无效状态,那么您应该抛出一个SystemException 或从SystemException 直接派生的异常。这是标题中问题的答案。
但是,您在问题文本中提及的例外情况是您的对象的用户将其推入非法状态。在这种情况下,InvalidOperationException 是正确的抛出异常,如this earlier answer 所示。这将避免您的对象进入非法状态。
不用说你需要记录你的对象应该如何被使用。如果您的对象具有较长的预期寿命,或者如果它在不同对象之间使用/共享,那么用户能够请求当前状态并实现ToString 以将当前状态作为文本检索是很好的,例如在调试环境/日志中。
【讨论】:
如果我想说 System.InvalidProgramException 最接近你想要的。抛出自定义异常有什么问题?
【讨论】: