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

时间:2008-11-03 20:17:56

标签: c# .net exception

如果我遇到非法状态,我应该抛出什么异常 - 例如,一个只应该被调用一次的初始化方法?我真的没有看到任何有意义的内置异常。这似乎应该在框架中 - 我不是在正确的位置戳?

3 个答案:

答案 0 :(得分:68)

InvalidOperationException也许?

  

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

答案 1 :(得分:0)

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

但是,您在问题文本中引用的特殊情况是对象的用户将其推到非法状态。在那种情况下,InvalidOperationException是正确的抛出异常,如this earlier answer所示。这样可以避免您的对象进入非法状态。

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

答案 2 :(得分:-3)

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