我将以下代码作为使用reflection.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() });
由于我不知道的原因,程序会生成错误:
在参数,字段或属性中使用的设计器自定义属性类型无效。
答案 0 :(得分:0)
请参阅CustomAttributeBuilder文档的备注部分:
constructorArgs数组的元素仅限于元素 类型。它们可以是byte,sbyte,int,uint,long,ulong,float,double, 字符串,字符,布尔值,枚举,类型,以及任何以前的类型 被转换为一个对象,或任何一个基于零的基于零的数组 以前的类型。
您不能将XmlDocument
类型用作构造函数参数,因为它不在列表中。此限制来自C#属性参数限制。有关可接受参数类型的列表,请参阅C#规范的17.1.3 Attribute parameter types部分:
构造函数public Class1(XmlDocument doc)
对常规C#类完全有效,您可以在属性类中声明它。但是,当您将属性应用于代码时,您无法使用它。这是任何属性类的目标。所以,尽管你可以声明这样的构造函数,但它对于属性类没有任何意义。
答案 1 :(得分:0)
我找到了解决方法。我将使用类XmlAttributeAttribute。谢谢。