2011-05-21 62 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

由于您的自定义属性中没有任何有趣的内容,我们只是选择打印出类型的名称。你会明显地做一些更令人兴奋的与你的真实类型的实例。