创建OperationAbortedException的实例

时间:2012-09-03 11:13:15

标签: c# .net c#-4.0 exception

如何创建OperationAbortedException?此代码不起作用:

var ex = new OperationAbortedException("Cannot update event comment");

错误:无法访问私有构造函数'OperationAbortedException'。

3 个答案:

答案 0 :(得分:9)

System.Data.OperationAbortException - 班级(我假设你的意思是这个,因为你没有在你的问题中完全符合条件)。没有公共构造函数,而且是sealed。这些都是强有力的暗示,框架设计者并不希望您为自己的目的使用该异常。据推测,因为如果你这样做,框架的某些内部工作会变得混乱。

您应该为您的目的使用不同的例外。从您传递的消息文本中可以想到以下现有异常:

从.NET框架中选择现有的异常时,请确保不要仅通过类的名称选择它。确保您阅读相应的MSDN页面以了解异常的(原始)意图。相应的文档始终以单词"抛出的异常..."开头。如果您发现该文本与您的意图相符,请重用框架中的异常(或者在最终捕获异常时从中获取更好的控制权。)

如果必须,也可以创建自己的例外类型。

答案 1 :(得分:2)

如果您正在讨论System.Data.OperationAbortedException,那么您不能直接构建实例,也没有公共构造函数。

如果你真的想,你可以使用this answer中描述的方法使用反射,但我建议你不要这样做。这将是框架设计的腐败。


以下是您可以使用的代码,但请不要

var ctor = typeof(OperationAbortException).GetConstructor(
    BindingFlags.NonPublic|BindingFlags.Instance,
    null, 
    new Type[0], 
    null);
var instance = (OperationAbortException)ctor.Invoke(null);

你必须弄清楚要使用哪个私有构造函数,如果有多个私有构造函数,以及应该将哪些属性设置为什么。没有人知道这种行为会在以后的框架版本中持续存在。

答案 2 :(得分:1)

这是不可能的。 OperationAbortedException有一个私有构造函数和一个调用该构造函数的内部静态方法。无法从另一个程序集创建新的OperationAbortedException。