2012-05-24 16 views
20

के कस्टम गुण प्राप्त करें WinRT .NET अनुप्रयोग (सी #) में मैं कस्टम गुण प्राप्त करना चाहता हूं, जो कि enum value पर परिभाषित हैं। उदाहरण के लिए निम्नलिखित enum लें:enum value

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

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

अब "सामान्य" .NET में मुझे पता है कि मैं enumValue.GetType().GetMember(enumValue.ToString()) के साथ एक enum मूल्य की कस्टम विशेषताओं प्राप्त करने में सक्षम हूँ।

दुर्भाग्यवश, WinRT .NET में GetMember() विधि प्रकार वर्ग पर उपलब्ध नहीं है।
कोई सुझाव इस के साथ कैसे जाना है?

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

नीचे मार्क के लिए धन्यवाद, मुझे उत्तर मिला! निम्नलिखित कोड .NET 4.5 WinRT में एक enum मूल्य से एक विशिष्ट कस्टम विशेषता प्राप्त करने के लिए काम करता है:

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

Thats संभव नहीं है। Type.GetMember अभी भी .NET 4.5 में मौजूद है! – logicnp

+0

@logicnp: WinRT API पूर्ण .NET API का सबसेट है। –

उत्तर

14

बजाय सदस्यों की तलाश में हैं, तो आप शायद विशेष रूप से क्षेत्रों के लिए दिखना चाहिए। यदि यह WinRT में Type पर उपलब्ध नहीं है, तो using System.Reflection; जोड़ें और type.GetTypeInfo() का उपयोग करें और वहां भी देखें, क्योंकि विभिन्न प्रतिबिंबित पहलू टाइप-जानकारी में स्थानांतरित हो जाते हैं।

+0

धन्यवाद, यह चाल है! मैंने जवाब के साथ उपरोक्त मेरे प्रश्न का पूरक किया। – Matthias