2012-05-24 4 views
20

のカスタム属性を取得します。私はenumValue.GetType().GetMember(enumValue.ToString())と列挙値のカスタム属性を取得することができるよということを知っている「正常な」.NETで今私は列挙型の値で定義されたカスタム属性を取得したいWinRTの.NETアプリケーション(C#の)で列挙型の値

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

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

:たとえば、次の列挙型を取ります。

残念ながら、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>(); 
    } 
} 
+0

は "WinRTのC#の" でプレフィックスyurのタイトルをdo'tしてください。それがタグのためのものです。 –

+0

それはできません。 Type.GetMemberは.Net 4.5にまだ存在します! – logicnp

+0

@logicnp:WinRT APIは、完全な.NET APIのサブセットです。 –

答えて

14

よりもむしろメンバーを探して、あなたはおそらく分野に特化しているはずです。それは、WinRTのでTypeで利用できない場合は、using System.Reflection;を追加して、様々な反射面が型情報に移動しているとして、type.GetTypeInfo()を使用してもそこに見えます。そして、このような:

+0

ありがとう、それはトリックでした!私は答えに上記の私の質問を補完した。 – Matthias

関連する問題