2012-05-03 9 views
5

जरूरत है मैं कैसेenum स्ट्रिंग पर सेट और डंक मूल्य प्राप्त जब

enum myenum 
{ 
    name1 = "abc", 
    name2 = "xyz" 
} 

निम्नलिखित की तरह इस
मैं कोड चाहते हैं क्या करना है और यह जाँच

if (myenum.name1 == variable) 

कैसे मैं उन कर सकते हैं नहीं है बातें?

thanx।

+0

आप क्या हासिल करना चाहते हैं? यह नहीं है कि कैसे enums का उपयोग किया जाता है। आपकी 'if' स्थिति समझ में नहीं आती है - अगर यह काम करता है तो यह हमेशा' सत्य 'वापस आ जाएगा, क्योंकि' name1' को इसके मूल्य के रूप में 'abc' घोषित किया गया था। एक उपयोगी स्थिति 'if (var == myenum.name1)' होगी। –

+0

हां इस तरह .. क्षमा करें – Darshana

+0

संभावित डुप्लिकेट [सी # में स्ट्रिंग्स के साथ एसोसिएटिंग एनम्स] (http://stackoverflow.com/questions/630803/associating-enums-with-strings-in-c-sharp) – nawfal

उत्तर

12

दुर्भाग्य से यह संभव नहीं है। Enums केवल मूल अंतर्निहित प्रकार (int, uint, short, आदि हो सकता है)। यदि आप एनम मानों को अतिरिक्त डेटा से जोड़ना चाहते हैं, तो मानों पर गुण लागू करें (जैसे DescriptionAttribute)।

public static class EnumExtensions 
{ 
    public static TAttribute GetAttribute<TAttribute>(this Enum value) 
     where TAttribute : Attribute 
    { 
     var type = value.GetType(); 
     var name = Enum.GetName(type, value); 
     return type.GetField(name) 
      .GetCustomAttributes(false) 
      .OfType<TAttribute>() 
      .SingleOrDefault(); 
    } 

    public static String GetDescription(this Enum value) 
    { 
     var description = GetAttribute<DescriptionAttribute>(value); 
     return description != null ? description.Description : null; 
    } 
} 

enum MyEnum 
{ 
    [Description("abc")] Name1, 
    [Description("xyz")] Name2, 
} 

var value = MyEnum.Name1; 
if (value.GetDescription() == "abc") 
{ 
    // do stuff... 
} 
+0

क्यों न सिर्फ enum.ToString ("एफ")? – ghanashyaml

0

यह पहले यहां डिस्कवर किया गया था, लेकिन इसे नहीं मिला। लघु संस्करण: आप enum सदस्यों स्ट्रिंग मान नहीं दे सकते हैं। आप सदस्य नामों को मानों के रूप में उपयोग कर सकते हैं, लेकिन अक्सर यह वही नहीं है जो आप चाहते हैं। गाइड के लिए follow this link कृपया सदस्यों के लिए स्ट्रिंग मानों को एनोटेट करने के लिए विशेषताओं का उपयोग कैसे करें।

4

here के मुताबिक जो भी आप कर रहे हैं वह संभव नहीं है। क्या आप शायद कर सकता है एक स्थिर स्थिरांक का पूरा वर्ग, शायद इसलिए की तरह कुछ है करने के लिए होगा:

class Constants 
{ 
    public static string name1 = "abc"; 
    public static string name2 = "xyz"; 
} 

... 

if (Constants.name1 == "abc")... 
0

कि आप क्या करना चाहते हैं पर निर्भर करता है, हो सकता है आप एक Dictionary बजाय enum उपयोग करके एक ही प्रभाव को प्राप्त कर सकता है रों।

0

अच्छा जवाब यहां दिए गए हैं। सुझाए गए उत्तर पर विस्तार से यह है कि यदि आप एनम मान दिए गए एनम मान प्राप्त करना चाहते हैं तो यह है। इस प्रकार

public enum e_BootloadSource : byte 
{ 
    [EnumMember] 
    [Display(Name = "UART")] 
    [Description("UART_BL_RDY4RESET")] 
    UART = 1, 
    [EnumMember] 
    [Display(Name = "SD")] 
    [Description("SD_BL_RDY4RESET")] 
    SD = 2, 
    [EnumMember] 
    [Display(Name = "USB")] 
    [Description("USB_BL_RDY4RESET")] 
    USB = 3, 
    [EnumMember] 
    [Display(Name = "Fall Through Mode")] 
    [Description("FALL_THRGH_BL_RDY4RESET")] 
    FALL_THROUGH_MODE = 4, 
    [EnumMember] 
    [Display(Name = "Cancel Bootload")] 
    [Description("BL_CANCELED")] 
    CANCEL_BOOTLOAD = 5, 
} 

उपयोग:: मैं इस परीक्षण किया नहीं किया, लेकिन यह काम हो सकता है:

Enum

foreach(e_BootloadSource BLSource in Enum.GetValues(typeof(e_BootloadSource))) 
        { 
         if (BLSource.GetDescription() == inputPieces[(int)SetBLFlagIndex.BLSource]) 
         { 
          newMetadata.BootloadSource = BLSource; 
         } 
        } 

नोट inputpieces विशुद्ध रूप से एक स्ट्रिंग सरणी है और newMetadata.BootloadSource e_BootloadSource है।

संबंधित मुद्दे