C# में स्ट्रिंग को enum में कैसे बदलें: शुरुआत से विशेषज्ञ तक
\n\nहर C# डेवलपर को देर-सबेर ऐसी स्थिति का सामना करना पड़ता है जहाँ एक सामान्य स्ट्रिंग को एनुम (enum) में बदलना होता है। आप JSON से डेटा प्राप्त करते हैं, कॉन्फ़िगरेशन फ़ाइल से सेटिंग्स पढ़ते हैं, या उपयोगकर्ता से कमांड लेते हैं — और आपके सामने एक स्ट्रिंग है, जबकि कोड को enum की आवश्यकता है। सही रूपांतरण के बिना, आपको एक अपवाद (exception) मिल सकता है, या इससे भी बदतर, लॉजिक में एक अनदेखी त्रुटि हो सकती है।
\n\nइस लेख में, हम C# में स्ट्रिंग को enum में बदलने के सरल तरीकों से लेकर उन्नत तकनीकों तक सब कुछ समझेंगे। आप सीखेंगे कि स्ट्रिंग्स को सुरक्षित रूप से कैसे पार्स करें, त्रुटियों को कैसे संभालें और सुरुचिपूर्ण कोड कैसे लिखें। यह सामग्री Stack Overflow पर वास्तविक प्रश्नों पर आधारित है — इस विषय ने हजारों बार देखा गया है, यह कोई संयोग नहीं है।
\n\nचलिए शुरू करते हैं!
\n\nस्ट्रिंग को enum में बदलना एक सामान्य कार्य क्यों है
\n\nC# में एनुमरेशन पठनीय और टाइप-सुरक्षित कोड बनाने के लिए एक शक्तिशाली उपकरण है। लेकिन बाहरी दुनिया आमतौर पर स्ट्रिंग्स के साथ काम करती है: API "Admin" लौटाते हैं, उपयोगकर्ता "readonly" दर्ज करता है, डेटाबेस "Pending" संग्रहीत करता है। इन दुनियाओं को जोड़ने के लिए, C# में string को enum में बदलना आवश्यक है।
\n\nआइए सामान्य परिदृश्यों पर विचार करें:
\n- \n
- JSON डिसीरियलाइज़ेशन — स्थिति फ़ील्ड एक स्ट्रिंग के रूप में आती है \n
- कमांड-लाइन आर्गुमेंट्स का पार्सिंग \n
- appsettings.json से सेटिंग्स पढ़ना \n
- वेब फ़ॉर्म में उपयोगकर्ता इनपुट प्रोसेस करना \n
सही दृष्टिकोण के बिना, आपको या तो अपवाद मिलेगा या ऐसी बग्स जिन्हें पकड़ना मुश्किल है। आइए टूलसेट को समझते हैं।
\n\nबुनियादी विधि: Enum.Parse — तेज़ और सरल
\n\nC# में स्ट्रिंग को enum में बदलने का सबसे प्रसिद्ध तरीका Enum.Parse विधि है। यह .NET के शुरुआती संस्करणों से मौजूद है और आज भी सक्रिय रूप से उपयोग किया जाता है।
using System;\n\npublic enum UserRole\n{\n Admin,\n Moderator,\n User,\n Guest\n}\n\nclass Program\n{\n static void Main()\n {\n string input = "Admin";\n UserRole role = (UserRole)Enum.Parse(typeof(UserRole), input);\n Console.WriteLine(role); // आउटपुट: Admin\n }\n}\n\n\nयहाँ हम परिणाम को स्पष्ट रूप से आवश्यक प्रकार में डालते हैं, क्योंकि Enum.Parse एक object लौटाता है। यह विधि केस-सेंसिटिव है: स्ट्रिंग "admin" एक अपवाद उत्पन्न करेगी। यदि आप केस के बारे में सुनिश्चित नहीं हैं, तो तीसरा पैरामीटर जोड़ें:
UserRole role = (UserRole)Enum.Parse(typeof(UserRole), input, ignoreCase: true);\n\n\nअब "admin", "ADMIN" और यहाँ तक कि "AdMiN" भी सही ढंग से रूपांतरित हो जाएंगे। लेकिन एक बारीकी है: यदि स्ट्रिंग enum के किसी भी मान से मेल नहीं खाती है, तो आपको ArgumentException मिलेगा। और इसका मतलब है कि प्रोग्राम क्रैश हो जाएगा।
Enum.Parse कब खराब विकल्प है
\n- \n
- आप इनपुट डेटा को नियंत्रित नहीं करते (उपयोगकर्ता इनपुट) \n
- स्ट्रिंग null या खाली हो सकती है \n
- आप अपवादों से बचना चाहते हैं \n
ऐसे मामलों के लिए Enum.TryParse बनाया गया है।
सुरक्षित दृष्टिकोण: Enum.TryParse — बिना अपवादों के
\n\nC# में Enum.TryParse आपका जीवन रक्षक है। यह अपवाद नहीं फेंकता, बल्कि एक bool लौटाता है: true यदि रूपांतरण सफल है, और false अन्यथा।
string input = "Moderator";\nif (Enum.TryParse(input, ignoreCase: true, out UserRole result))\n{\n Console.WriteLine($"भूमिका: {result}");\n}\nelse\n{\n Console.WriteLine("भूमिका को पहचानने में विफल");\n}\n\n\nध्यान दें: TryParse एक जेनेरिक विधि है, इसलिए परिणाम को डालने की आवश्यकता नहीं है। ignoreCase पैरामीटर Parse की तरह ही काम करता है। यह विधि C# में सुरक्षित enum पार्सिंग के लिए आदर्श है।
लेकिन एक छिपा हुआ खतरा है: TryParse संख्यात्मक स्ट्रिंग्स के पार्सिंग को सफल मानता है। स्ट्रिंग "42" को संख्यात्मक समतुल्य 42 वाले enum मान में बदल दिया जाएगा, भले ही ऐसा कोई मान मौजूद न हो। इससे बचने के लिए, जोड़ें