2011-05-21 50 views
2

我有一個自定義屬性,我想申請一個枚舉類型本身,但我無法確定正確的路徑來獲得在適當的*信息爲了暴露屬性。如何體現自定義屬性應用於枚舉類型本身

像這樣的事情

[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)] 
public class MyCustAttribute : Attribute {} 
[MyCust()] 
[MyCust()] 
[MyCust()]/*...and so on...*/ 
public enum MyEnumType{} 

我所熟悉的反映來自枚舉值說DescriptionAttribute的更「習慣」的方法。我做那種事情的時候,沒有任何問題。如下面的類型案例。

public enum MyEnumType { 
    [Description("My First Value")] 
    First, 
    [Description("My Second Value")] 
    Second, 
} 

我確定這很明顯,但我不明白這是否可能。

回答

6

可以遍歷一個enum類型的自定義屬性是這樣的:

static void Main(string[] args) 
{ 
    var attributes = typeof(MyEnumType).GetCustomAttributes(typeof(MyCustAttribute), false); 
    foreach (MyCustAttribute attribute in attributes) 
     Console.WriteLine("attribute: {0}", attribute.GetType().Name); 
    Console.ReadKey(); 
} 

在這個例子中,GetCustomAttributes返回object數組。我們使用foreach循環的能力投下多達我們知道數組元素包含,因爲這是我們要求的類型:MyCustAttribute

由於您的自定義屬性中沒有任何有趣的內容,我們只是選擇打印出類型的名稱。你會明顯地做一些更令人興奮的與你的真實類型的實例。