21

WinRT .NETアプリケーション(C#)で、列挙値で定義されているカスタム属性を取得したいと思います。たとえば、次の列挙型を取り上げます。

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

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

これで、「通常の」.NETで、。を使用して列挙値のカスタム属性を取得できることがわかりましたenumValue.GetType().GetMember(enumValue.ToString())

残念ながら、WinRT .NETでは、このGetMember()メソッドはTypeクラスでは使用できません。
これをどうやってやるのか提案はありますか?

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

以下のマークのおかげで、私は答えを見つけました!次のコードは、.NET4.5WinRTの列挙値から特定のカスタム属性を取得するために機能します。

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

メンバーを探すのではなく、特にフィールドを探す必要があります。WinRTでそれが利用できない場合は、さまざまな反射ファセットがtype-in​​foに移動されるためType、追加using System.Reflection;して使用type.GetTypeInfo()し、そこでも確認してください。

于 2012-05-24T06:27:19.260 に答える