2012-05-24 175 views
20

的自定義屬性在WinRT的.NET應用程序(C#)我想要得到的自定義屬性,那些對枚舉值定義。看看下面的枚舉,例如:獲取枚舉值

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

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

現在,在「正常」。NET我知道,我能與enumValue.GetType().GetMember(enumValue.ToString())獲得枚舉值的自定義屬性。

不幸的是,在WinRT中.NET的GetMember()方法不可用的Type類。
任何建議如何去與此?

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

得益於以下馬克,我找到了答案! 下面的代碼工作得到來自枚舉值特定的自定義屬性在.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

請do't前綴尤爾職稱 「的WinRT C#:」 和這樣的。這就是標籤的用途。 –

+0

那是不可能的。 Type.GetMember仍然存在於.Net 4.5中! – logicnp

+0

@logicnp:WinRT API是完整.NET API的子集。 –

回答

14

而不是找成員,你或許應該專門尋找各個領域。如果不可用在WinRT中的Type,加using System.Reflection;和使用type.GetTypeInfo(),並期待在那裏,各種反射面被移動到類型信息。

+0

謝謝,這個伎倆!我用上面的答案補充了我的問題。 – Matthias