2014-07-08 35 views
2

我有以下代碼作爲用於生成使用Reflection.Emit的錯誤類型的XmlDocument執行CustomAttributeBuilder

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() }); 

對於我的原因不明的接口的系統的一部分,該程序生成一個錯誤:

In an argument, field, or property used designer custom attribute type is invalid.

回答

0

見備註CustomAttributeBuilder文件的部分:

The elements of the constructorArgs array are restricted to element types. They can be byte, sbyte, int, uint, long, ulong, float, double, String, char, bool, an enum, a type, any of the previous types that was cast to an object, or a single-dimension, zero-based array of any of the previous types.

您不能使用XmlDocument類型作爲構造函數參數,因爲它不在列表中。此限制來自C#屬性參數限制。參見上可接受的參數類型列表C#說明書的17.1.3 Attribute parameter types部分:

  • 其中一個以下類型的:布爾,字節,字符,雙,浮點型,整型,長,短,字符串。
  • 類型對象。
  • 類型System.Type。
  • 枚舉類型,前提是它具有公共可訪問性,並且它嵌套(如果有)的 中的類型也具有公共可訪問性( 17.2)。
  • 上述類型的一維數組。

構造函數public Class1(XmlDocument doc)對於普通的C#類是完全有效的,您可以在屬性類中聲明它。但是,當你將屬性應用於你的代碼時,你不能使用它。這是任何屬性類的目標。所以,儘管你可以聲明這樣的構造函數,但它對於屬性類沒有任何意義。

0

我找到了解決方法。我將使用類XmlAttributeAttribute。謝謝。