2

我有以下代码作为使用反射生成接口的系统的一部分.emit

class Class1:Attribute 
{
    public Class1(XmlDocument doc) 
    {
    }
}

var type = typeof(Class1);
var ctore = type.GetConstructor(new[] { typeof(XmlDocument) });
var cab = new CustomAttributeBuilder(ctore, new object[] { new XmlDocument() });

由于我不知道的原因,该程序会生成一个错误:

在参数、字段或属性中使用的设计器自定义属性类型无效。

4

2 回答 2

0

请参阅CustomAttributeBuilder文档的备注部分:

constructorArgs 数组的元素仅限于元素类型。它们可以是 byte、sbyte、int、uint、long、ulong、float、double、String、char、bool、枚举、类型、之前被强制转换为对象的任何类型,或一维、零- 基于任何先前类型的数组。

您不能将XmlDocument类型用作构造函数参数,因为它不在列表中。此限制来自 C# 属性参数限制。有关可接受的参数类型列表,请参阅C# 规范的17.1.3 属性参数类型部分:

  • 以下类型之一:bool、byte、char、double、float、int、long、short、string。
  • 类型对象。
  • 类型 System.Type。
  • 枚举类型,前提是它具有公共可访问性,并且它嵌套的类型(如果有)也具有公共可访问性(第 17.2 节)。
  • 上述类型的一维数组。

构造函数public Class1(XmlDocument doc)对于普通的C#类是完全有效的,你可以在属性类中声明它。但是当您将属性应用于代码时,您不能使用它。这是任何属性类的目标。所以,尽管你可以声明这样的构造函数,但它对属性类没有任何意义。

于 2014-07-08T10:37:28.740 回答
0

我找到了解决方法。我将使用 XmlAttributeAttribute 类。谢谢你。

于 2014-07-11T19:03:52.703 回答