C# में Enum के सभी मानों को कैसे पार करें: शुरुआती से पेशेवर तक
\n\nएक स्थिति की कल्पना करें: आप C# में एक गेम लिख रहे हैं, और आपके पास कठिनाई स्तरों के साथ एक एनुम Difficulty है: Easy, Normal, Hard, Insane। आपको उन सभी को चयन मेनू में प्रदर्शित करना है, या, मान लीजिए, कॉन्फ़िगरेटर के लिए एक ड्रॉपडाउन सूची बनानी है। यह कैसे करें? हाथ से स्ट्रिंग्स की एक सरणी लिखें? और अगर कल कोई नया स्तर जुड़ जाए? तो आपको कोड में जाकर तीन जगहों पर बदलाव करना होगा।
सौभाग्य से, C# में एक सुरुचिपूर्ण समाधान है। प्रश्न "How to loop through all enum values in C#?" Stack Overflow पर सबसे लोकप्रिय प्रश्नों में से एक है (सैकड़ों हज़ारों व्यूज़)। और आज हम इसे पूरी तरह से समझेंगे। आप एक नहीं, बल्कि पूरे 4 तरीके सीखेंगे enum मानों को पार करने के, समझेंगे कि कब किसका उपयोग करना है, और तैयार कोड प्राप्त करेंगे जिसे आप अपने प्रोजेक्ट में कॉपी कर सकते हैं।
\n\nचलिए शुरू करते हैं!
\n\n\n\n
C# में Enum क्या है और इसे क्यों पार करें?
\n\nEnum (एनुमरेशन) नामित स्थिरांकों का एक सेट है। यह याद रखने के बजाय कि 0 = Easy, 1 = Normal, 2 = Hard, आप बस Difficulty.Easy लिखते हैं। कोड पढ़ने योग्य और सुरक्षित हो जाता है।
लेकिन जब प्रोजेक्ट में 10-20 enum मान हों, तो देर-सबेर यह कार्य आता है: उन सभी को प्राप्त करना। उदाहरण के लिए:
\n- \n
- UI में ComboBox या Dropdown भरना। \n
- सभी विकल्पों के लिए परीक्षण डेटा बनाना। \n
- प्रत्येक मान पर विशेषताएँ लागू करना। \n
- दो enum सेटों की तुलना करना। \n
यह लिखने के बजाय:
\nstring[] names = { "Easy", "Normal", "Hard", "Insane" };\n\n…हम रिफ्लेक्शन और .NET की अंतर्निहित विधियों का उपयोग करते हैं। यह लचीला, स्केलेबल है और इसे मैन्युअल अपडेट की आवश्यकता नहीं है।
\n\n\n\n
तरीका 1: क्लासिक — Enum.GetValues (सबसे लोकप्रिय)
\n\nयह वह उत्तर है जो आपको Stack Overflow पर सबसे अधिक वोटों के साथ मिलेगा। विधि Enum.GetValues(typeof(YourEnum)) किसी विशिष्ट एनुमरेशन के सभी मानों की एक सरणी लौटाती है।
कोड उदाहरण:
\nusing System;\n\npublic enum Difficulty\n{\n Easy,\n Normal,\n Hard,\n Insane\n}\n\nclass Program\n{\n static void Main()\n {\n Console.WriteLine("सभी कठिनाई स्तर:");\n \n // enum मानों की सरणी प्राप्त करें\n Difficulty[] allDifficulties = (Difficulty[])Enum.GetValues(typeof(Difficulty));\n \n foreach (Difficulty level in allDifficulties)\n {\n Console.WriteLine($"स्तर: {level} (संख्यात्मक मान: {(int)level})");\n }\n }\n}\n\nकंसोल आउटपुट:
\nसभी कठिनाई स्तर:\nस्तर: Easy (संख्यात्मक मान: 0)\nस्तर: Normal (संख्यात्मक मान: 1)\nस्तर: Hard (संख्यात्मक मान: 2)\nस्तर: Insane (संख्यात्मक मान: 3)\n\nमहत्वपूर्ण: Enum.GetValues Array प्रकार की एक सरणी लौटाता है, इसलिए इसे स्पष्ट रूप से आपके enum प्रकार में बदलना होगा। .NET 5 से शुरू करके, एक जेनेरिक संस्करण है: Enum.GetValues<Difficulty>(), जो थोड़ा अधिक सुविधाजनक है।
// .NET 5+ \nDifficulty[] allDifficulties = Enum.GetValues<Difficulty>();\nforeach (var level in allDifficulties)\n{\n Console.WriteLine(level);\n}\n\n\n\n
तरीका 2: Enum.GetNames के माध्यम से नाम प्राप्त करें
\n\nकभी-कभी आपको मानों की नहीं, बल्कि उनके स्ट्रिंग नामों की आवश्यकता होती है (उदाहरण के लिए, UI के लिए)। इसके लिए Enum.GetNames है। यह स्ट्रिंग्स की एक सरणी लौटाता है।
उदाहरण:
\nstring[] names = Enum.GetNames(typeof(Difficulty));\nConsole.WriteLine("स्तरों के नाम:");\nforeach (string name in names)\n{\n Console.WriteLine(name);\n}\n\nआउटपुट:
\nस्तरों के नाम:\nEasy\nNormal\nHard\nInsane\n\nकब उपयोग करें? यदि आपको स्ट्रिंग्स की आवश्यकता है (उदाहरण के लिए, इंटरफ़ेस में प्रदर्शित करने या लॉगिंग के लिए), न कि स्वयं enum स्थिरांकों की।