Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否存在表示非法对象状态的内置.NET异常?_C#_.net_Exception - Fatal编程技术网

C# 是否存在表示非法对象状态的内置.NET异常?

C# 是否存在表示非法对象状态的内置.NET异常?,c#,.net,exception,C#,.net,Exception,如果遇到非法状态,我应该抛出什么异常?例如,一个只应该调用一次的初始化方法被第二次调用?我真的没有看到任何有意义的内置异常。这似乎是框架中应该包含的内容—我是否没有插入正确的位置?可能 当方法调用对于对象的当前状态无效时引发的异常 如果有的话,我会说System.InvalidProgrameException最接近您想要的。抛出自定义异常有什么问题?通常,您应该以这样一种方式对对象进行编程,使其无法达到无效状态。如果发现对象处于无效状态,则应抛出SystemException或直接从Syste

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

可能

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


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

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

但是,您在问题文本中提到的例外情况是,您的对象的用户将其推入非法状态。在这种情况下,
invalidoOperationException
是正确的异常抛出方式,如中所示。这将避免对象进入非法状态


不用说,您需要记录应该如何使用对象。如果对象的预期寿命较长,或者在不同对象之间使用/共享,则用户可以请求当前状态,并实现
ToString
以文本形式检索当前状态,例如,在调试环境/log中。

越来越多的人应该使用InvalidOperationException,而不是创建新的。True,或者至少从它派生,以便捕获InvalidOperationException也捕获派生的异常。查看从IOE(MSDN的底部)派生的异常,看看什么时候可以使用自己的异常。这取决于。毕竟,您试图执行一个无效的操作,但是有很多方法可以命名它。那么,如果调用总是无效的,那么您会期望什么呢?无论对象处于何种状态,或者取决于实际的上下文。在永久不可用的方法中,我认为NoTuffTestExpCress不应该是一个有效的调用。如果是暂时缺少实现,或者是上下文相关的对象状态而未实现实际实现,请使用NotImplementedException。IPE:“当程序包含无效的Microsoft中间语言(MSIL)或元数据时引发的异常。通常这表示生成该程序的编译器中存在错误。”. 使用标准异常可以在框架和第三方应用程序之间建立一致性。如果框架中没有任何内容支持您的案例,则自定义异常没有任何错误。我可以写一个定制的ArrayList,但为什么呢?好吧,就像pYrania一样,我也不知道为什么你认为这很重要?您必须编写一些代码来实现ArrayList,但这无法与创建自定义异常相比较……关键是您不应该复制现有功能。如果我抛出一个自定义异常,这是使用我的库的程序员必须学习的另一件事。如果我遵循框架的约定,我允许他们利用他们现有的知识。是的,但是您应该为您的库编写文档。因此,对于用户来说,抛出的异常是Exception1还是Exception2并不重要。