C # में स्ट्रिंग से एनम वैल्यू कैसे प्राप्त करें?


102

मेरे पास एक एनम है:

public enum baseKey : uint
{  
    HKEY_CLASSES_ROOT = 0x80000000,
    HKEY_CURRENT_USER = 0x80000001,
    HKEY_LOCAL_MACHINE = 0x80000002,
    HKEY_USERS = 0x80000003,
    HKEY_CURRENT_CONFIG = 0x80000005
}

मैं, स्ट्रिंग को देखते हुए HKEY_LOCAL_MACHINE, 0x80000002एनम के आधार पर एक मूल्य कैसे प्राप्त कर सकता हूं ?

जवाबों:


173
baseKey choice;
if (Enum.TryParse("HKEY_LOCAL_MACHINE", out choice)) {
     uint value = (uint)choice;

     // `value` is what you're looking for

} else { /* error: the string was not an enum member */ }

.NET 4.5 से पहले, आपको निम्न कार्य करना था, जो अधिक त्रुटि-प्रवण है और एक अमान्य स्ट्रिंग पास होने पर अपवाद को फेंकता है:

(uint)Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE")

1
मुझे हमेशा आश्चर्य होता है कि Enum.Parse के लिए अभी भी कोई सामान्य अधिभार क्यों नहीं है। यह लंबे समय से अतिदेय है।
फलांवे

3
अब जेनेरिक Enum.TryParse <TEnum> () विधि है।
यूजीन मेक्सिमोव

27

Enum.TryParse का उपयोग करना आपको अपवाद से निपटने की आवश्यकता नहीं है:

baseKey e;

if ( Enum.TryParse(s, out e) )
{
 ...
}


16

कुछ त्रुटि से निपटने के साथ ...

uint key = 0;
string s = "HKEY_LOCAL_MACHINE";
try
{
   key = (uint)Enum.Parse(typeof(baseKey), s);
}
catch(ArgumentException)
{
   //unknown string or s is null
}

1
var value = (uint)Enum.Parse(typeof(basekey), "HKEY_LOCAL_MACHINE", true);

यह कोड स्निपेट एक स्ट्रिंग से एक एनम मूल्य प्राप्त करने को दिखाता है। स्ट्रिंग से परिवर्तित करने के लिए, आपको स्थिर Enum.Parse()विधि का उपयोग करने की आवश्यकता है , जिसमें 3 पैरामीटर हैं। पहला वह प्रकार है जिस पर आप विचार करना चाहते हैं। वाक्यविन्यास वह शब्द है typeof()जिसके बाद कोष्ठक में enum वर्ग का नाम आता है। दूसरा पैरामीटर परिवर्तित करने के लिए स्ट्रिंग है, और तीसरा पैरामीटर एक हैbool संकेत है कि क्या आपको रूपांतरण करते समय मामले को अनदेखा करना चाहिए।

अंत में, ध्यान दें कि Enum.Parse()वास्तव में एक वस्तु संदर्भ देता है, इसका मतलब है कि आपको इसे स्पष्ट रूप से आवश्यक एनुम प्रकार में बदलने की आवश्यकता है ( string,int आदि) में ।

धन्यवाद।


-2

वैकल्पिक समाधान हो सकता है:

baseKey hKeyLocalMachine = baseKey.HKEY_LOCAL_MACHINE;
uint value = (uint)hKeyLocalMachine;

या केवल:

uint value = (uint)baseKey.HKEY_LOCAL_MACHINE;

3
कैसे वास्तव में एक स्ट्रिंग को एनम मान में परिवर्तित करता है?
फलांवे

Enums में दो घटक होते हैं: नाम और मान। मान लीजिए कि नाम "HKEY_LOCAL_MACHINE" है और मूल्य "0x80000002" है। Enum.Parse () विधि इस मामले में बेकार है क्योंकि आप enum के सदस्य को uint में डाल सकते हैं और मूल्य प्राप्त कर सकते हैं - 2147483650. Enum.Parse () बेशक एक ही परिणाम देता है, लेकिन एक पैरामीटर के रूप में एक स्ट्रिंग को हार्डकोड करने के बजाय आप डाल सकते हैं सीधे एनम चर आप के साथ काम कर रहे हैं।
जॉर्ज फाइंडलोव

4
आपने स्ट्रिंग "HKEY_LOCAL_MACHINE"को मान में परिवर्तित नहीं किया , जैसा कि ओपी ने पूछा, आपने प्रतीक HKEY_LOCAL_MACHINEको मूल्य में बदल दिया । बेतहाशा अलग जानवर।
फलांवे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.