2

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

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

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

4

3 回答 3

9

System.Data.OperationAbortException-class(我假设您的意思是这个,因为您在问题中没有完全限定它)。没有公共构造函数并且是sealed. 这些强烈暗示框架设计者不希望您出于自己的目的使用该异常。大概是因为如果你这样做了,框架的一些内部工作会变得混乱。

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

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

或者,如果必须,创建您自己的异常类型。

于 2012-09-03T11:17:12.460 回答
2

If you are talking about the System.Data.OperationAbortedException then no, you can not construct an instance directly, there are no public consrtuctors.

If you really wanted to, you could use reflection with the method described in this answer, but I reccomend that you do not. It would be a corruption of the framework's design.


Here is the code you could use but, please don't.

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

You'd have to work out which private constructor to use, if there is more than one, and which properties should be set to what. There is no garauntee that this behaviour would persist in later framework versions.

于 2012-09-03T11:17:49.973 回答
1

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

于 2012-09-03T11:16:57.610 回答