2012-05-24 2 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.
Любые предложения, как это сделать?

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

Спасибо 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#:» и т. Д. Для этого нужны теги. –

+0

Это невозможно. Тип.GetMember все еще присутствует в .Net 4.5! – logicnp

+0

@logicnp: API WinRT является подмножеством полного .NET API. –

ответ

14

Вместо того, чтобы искать членов, вы, возможно, следует искать специально для полей. Если это не доступно на Type в WinRT, добавьте using System.Reflection; и используйте type.GetTypeInfo() и посмотрите там тоже, так как различные аспекты отражения перемещаются в тип info.

+0

Спасибо, что сделал трюк! Я ответил на свой вопрос выше. – Matthias

Смежные вопросы