21

在 WinRT .NET 应用程序 (C#) 中,我想获取在枚举值上定义的自定义属性。以下面的枚举为例:

public enum MyEnum
{
    [Display(Name="Foo")]
    EnumValue1,

    [Display(Name="Bar")]
    EnumValue2
}

现在在“正常”.NET 中,我知道我可以使用 .NET 获取枚举值的自定义属性enumValue.GetType().GetMember(enumValue.ToString())

不幸的是,在 WinRT .NET 中,该GetMember()方法在 Type 类上不可用。
有什么建议吗?

==================================================== ===

感谢下面的 Marc,我找到了答案!以下代码用于从 .NET 4.5 WinRT 中的枚举值获取特定的自定义属性:

public static class EnumHelper
{
    public static T GetAttribute<T>(this Enum enumValue)
        where T : Attribute
    {
        return enumValue
            .GetType()
            .GetTypeInfo()
            .GetDeclaredField(enumValue.ToString())
            .GetCustomAttribute<T>();
    }
}
4

1 回答 1

14

与其寻找成员,不如专门寻找字段。Type如果在 WinRT中不可用,请添加using System.Reflection;并使用type.GetTypeInfo()并查看那里,因为各种反射方面已移至类型信息。

于 2012-05-24T06:27:19.260 回答