2012-05-24 20 views
20

En una aplicación WinRT .NET (C#) quiero obtener los atributos personalizados, que se definen en un valor enum. Tome la siguiente enumeración por ejemplo:Obtener atributos personalizados de valor enum

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

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

Ahora en .NET "normal" Yo sé que soy capaz de obtener los atributos personalizados de un valor de enumeración con enumValue.GetType().GetMember(enumValue.ToString()).

Desafortunadamente, en WinRT .NET, el método GetMember() no está disponible en la clase Type.
¿Alguna sugerencia de cómo ir con esto?

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

Gracias a Marc a continuación, encontré la respuesta ! El código siguiente funciona para obtener un atributo personalizado específico de un valor de enumeración en .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

Por favor, no prefija los títulos de yur con "WinRT C#:" y tal. Para eso son las etiquetas. –

+0

Eso no es posible. ¡Type.GetMember todavía está presente en .Net 4.5! – logicnp

+0

@logicnp: la API WinRT es un subconjunto de la API .NET completa. –

Respuesta

14

En lugar de buscar miembros, que tal vez debería buscar específicamente para los campos. Si no está disponible en el Type en WinRT, agregue using System.Reflection; y use type.GetTypeInfo() y mire allí también, ya que varias facetas de reflexión se mueven a la información de tipo.

+0

¡Gracias, eso funcionó! Completé mi pregunta anterior con la respuesta. – Matthias

Cuestiones relacionadas