2012-05-24 18 views
20

Bir WinRT .NET uygulamasında (C#) Enum değerinde tanımlanan özel öznitelikleri almak istiyorum. Örneğin aşağıdaki enum atın: Enum değerinin özel öznitelikleri alın

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

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

Şimdi "normal" NET'te ben enumValue.GetType().GetMember(enumValue.ToString()) bir enum değerinin özel ayrıntıları elde edebilmek olduğumu biliyorum.

WinRT .NET içinde, GetMember() yöntemi, Type sınıfında mevcut değildir.
Her türlü öneri nasıl yapılır?

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

Aşağıdaki Marc'a teşekkürler, cevabını buldum! Aşağıdaki kod .NET 4.5 WinRT bir enum değeri belirli bir özel özellik almak için çalışır:

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

Lütfen "WinRT C#:" ile başlıkları yazmayın ve böyle yapın. Etiketler bunun için var. –

+0

Bu mümkün değil. Type.GetMember hala .Net 4.5'de mevcut! – logicnp

+0

@logicnp: WinRT API, tam .NET API'sinin bir alt kümesidir. –

cevap

14

yerine üyeleri arayan, belki alanları için özel olarak bakmak gerekir. Bu, Type'da WinRT'de yoksa, using System.Reflection;'u ekleyin ve type.GetTypeInfo()'u kullanın ve çeşitli yansıma yönleri tür bilgisine taşınırken de oraya bakın.

+0

Teşekkürler, bu hile yaptı! Yukarıdaki sorumu cevapla tamamladım. – Matthias

İlgili konular