C# Enum(गणना) उदाहरण के साथ

⚡ स्मार्ट सारांश

C# में एन्यूमरेशन स्थिर पूर्णांक मानों का एक नामयुक्त समूह परिभाषित करते हैं, जैसे कि सप्ताह के दिन, जिससे कोड को पढ़ना और बनाए रखना आसान हो जाता है। enum कीवर्ड इन निश्चित स्थिरांकों को एक बार घोषित करता है ताकि इन्हें पूरे प्रोग्राम में पुन: उपयोग किया जा सके।

  • 📐 परिभाषा: enum कीवर्ड संबंधित नामित स्थिरांकों को एक प्रकार के अंतर्गत समूहित करता है, और बिखरे हुए मैजिक नंबरों को पठनीय पहचानकर्ताओं से बदल देता है।
  • 🗓️ दिनों का उदाहरण: Days नामक एक एन्यूमरेशन कार्यदिवसों को संग्रहीत करता है, और Days.Sun चयनित सदस्य को उसके नाम से लौटाता है।
  • 🔢 अंतर्निहित मूल्य: Enum के सदस्य पूर्णांक मानों से मैप होते हैं जो शून्य से शुरू होते हैं और कस्टम संख्याएँ निर्दिष्ट न किए जाने पर एक-एक करके बढ़ते हैं।
  • 🔁 रूपांतरण: एक्सप्लिसिट कास्ट एक एनम को उसके पूर्णांक में बदल देता है, जबकि Enum.Parse और Enum.TryParse टेक्स्ट को वापस सदस्यों में परिवर्तित करते हैं।
  • 🚩 झंडे: Flags एट्रिब्यूट एक एनम को बिटवाइज OR ऑपरेटर का उपयोग करके बिट फ़ील्ड के रूप में कई विकल्पों को संयोजित करने की अनुमति देता है।
  • 🤖 एआई सहायता: GitHub Copilot और ML.NET एनम परिभाषाएँ उत्पन्न करने और एनम को मशीन लर्निंग सुविधाओं से मैप करने में मदद करते हैं।

C# एनम (गणना)

सी# गणना

किसी भी प्रोग्रामिंग भाषा में मानों के एक स्थिर सेट को परिभाषित करने के लिए गणना का उपयोग किया जाता है। उदाहरण के लिए, सप्ताह के दिनों को गणना के रूप में परिभाषित किया जा सकता है और प्रोग्राम में कहीं भी इस्तेमाल किया जा सकता है। C# में, गणना को 'enum' कीवर्ड की मदद से परिभाषित किया जाता है।

आइए एक उदाहरण देखें कि हम 'enum' कीवर्ड का उपयोग कैसे कर सकते हैं।

हमारे उदाहरण में, हम days नामक एक गणना परिभाषित करेंगे, जिसका उपयोग सप्ताह के दिनों को संग्रहीत करने के लिए किया जाएगा। प्रत्येक उदाहरण के लिए, हम अपने Program.cs फ़ाइल में केवल मुख्य फ़ंक्शन को संशोधित करेंगे।

सी# गणना

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program 
 {
  enum Days{Sun,Mon,tue,Wed,thu,Fri,Sat};
  
  static void Main(string[] args) 
  {
   Console.Write(Days.Sun);
   
   Console.ReadKey();
  }
 }
}

Code स्पष्टीकरण: -

  1. 'एन्यूम' डाटा प्रकार गणना घोषित करने के लिए निर्दिष्ट किया जाता है। गणना का नाम दिन है। सप्ताह के सभी दिन गणना के मान के रूप में निर्दिष्ट किए जाते हैं।
  2. अंत में कंसोल.राइट फ़ंक्शन का उपयोग गणना के मानों में से एक को प्रदर्शित करने के लिए किया जाता है।

यदि उपरोक्त कोड ठीक से दर्ज किया गया है और प्रोग्राम सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट प्रदर्शित होगा।

आउटपुट:

सी# गणना

आउटपुट से, आप देख सकते हैं कि गणना का 'Sun' मान कंसोल में प्रदर्शित होता है।

C# में Enums का उपयोग क्यों करें?

एनम प्रोग्राम को पढ़ने में आसान, सुरक्षित और रखरखाव में सरल बनाते हैं। कोड में जगह-जगह अस्पष्ट संख्याओं (जिन्हें कभी-कभी मैजिक नंबर भी कहा जाता है) को बिखेरने के बजाय, एन्यूमरेशन प्रत्येक मान को एक वर्णनात्मक नाम देता है जो उसके उद्देश्य को स्पष्ट करता है।

  • पठनीयता: Days.Fri जैसा नाम संख्या 5 की तुलना में कहीं अधिक स्पष्ट है, इसलिए कोड को पढ़ने वाला कोई भी व्यक्ति इसका अर्थ तुरंत समझ जाता है।
  • टाइप सुरक्षा: एनम प्रकार के साथ घोषित चर केवल परिभाषित सदस्यों में से एक को ही धारण कर सकता है, जिससे अमान्य मानों के आने की संभावना कम हो जाती है।ping अंदर
  • रखरखाव: संबंधित स्थिरांक एक ही स्थान पर रहते हैं, इसलिए किसी मान को जोड़ने या उसका नाम बदलने से पूरा प्रोग्राम एकसमान रूप से अपडेट हो जाता है।
  • डेटा बाइंडिंग: WPF और ASP.NET जैसे फ्रेमवर्क एक एनम को ड्रॉपडाउन सूची से जोड़ सकते हैं, जिससे एनम उपयोगकर्ता इंटरफेस बनाने के लिए उपयोगी हो जाते हैं।

क्योंकि कंपाइलर हर असाइनमेंट की जांच अनुमत सदस्यों के विरुद्ध करता है, इसलिए एनम प्रोग्राम चलने से पहले ही गलतियों को पकड़ने में मदद करते हैं।

C# एनम को कस्टम मान असाइन करना

डिफ़ॉल्ट रूप से, C# पहले एनम सदस्य को 0 मान देता है और उसके बाद के प्रत्येक सदस्य को एक से बढ़ाता है। ऊपर दिए गए Days एनम में, Sun का मान 0, Mon का मान 1 और Sat का मान 6 है। आप स्पष्ट संख्याएँ निर्दिष्ट करके इन डिफ़ॉल्ट मानों को बदल सकते हैं।

  • स्पष्ट मान: enum Level {Low = 1, Medium = 5, High = 10} लिखने से प्रत्येक सदस्य को डिफ़ॉल्ट अनुक्रम के बजाय एक चयनित संख्या पर सेट किया जाता है।
  • आंशिक कार्य: यदि आप केवल कुछ सदस्यों को ही मान निर्दिष्ट करते हैं, तो कंपाइलर बाद के सदस्यों के लिए अंतिम निर्दिष्ट मान से क्रमांकन जारी रखता है।
  • अंतर्निहित प्रकार: एक एनम डिफ़ॉल्ट रूप से अपने सदस्यों को इंट के रूप में संग्रहीत करता है, लेकिन आप मेमोरी बचाने या रेंज बढ़ाने के लिए इसे बाइट, शॉर्ट या लॉन्ग पर आधारित कर सकते हैं।

कस्टम मान तब उपयोगी होते हैं जब संख्याओं को किसी बाहरी सिस्टम, जैसे डेटाबेस कोड या प्रोटोकॉल स्थिरांक, से मेल खाना आवश्यक होता है, ताकि एनम वास्तविक डेटा को सटीक रूप से प्रतिबिंबित कर सके।

C# Enums को int, string और Flags में कैसे परिवर्तित करें

C# में अक्सर एनम वैल्यू को किसी दूसरे रूप में बदलने की आवश्यकता होती है, जैसे कि उसे संख्या के रूप में स्टोर करना या टेक्स्ट से वापस पढ़ना। ये रूपांतरण कुछ मानक तरीकों से होते हैं।

  • एनम से इंट में परिवर्तन: (int)Days.Wed जैसा स्पष्ट कास्ट मूल पूर्णांक लौटाता है, जो भंडारण या अंकगणित के लिए उपयोगी है।
  • int से enum: उदाहरण के लिए, दूसरी दिशा में कास्टिंग करने से, (दिन)3, एक संख्या वापस मिलान करने वाले एनम सदस्य में बदल जाती है।
  • स्ट्रिंग को एनम में बदलना: Enum.Parse और अधिक सुरक्षित Enum.TryParse, "Fri" जैसे नाम को अमान्य टेक्स्ट पर त्रुटि उत्पन्न किए बिना Days.Fri सदस्य में परिवर्तित करते हैं।
  • एनम को स्ट्रिंग में बदलें: किसी भी सदस्य पर ToString फ़ंक्शन को कॉल करने पर उसका नाम वापस मिलता है, इसलिए Days.Sun.ToString() डिस्प्ले या लॉगिंग के लिए "Sun" आउटपुट देता है।
  • सदस्यों की सूची: Enum.GetValues ​​और Enum.GetNames प्रत्येक मान या नाम लौटाते हैं, जो मेनू को भरने या इनपुट को मान्य करने में सहायक होता है।

जब किसी एनम को एक विकल्प के बजाय विकल्पों के संयोजन को दर्शाना हो, तो फ़्लैग्स विशेषता का उपयोग करें और प्रत्येक सदस्य को दो की घात दें, जैसे 1, 2, 4 और 8। फिर आप बिटवाइज़ OR ऑपरेटर का उपयोग करके सदस्यों को संयोजित कर सकते हैं और HasFlag विधि का उपयोग करके किसी विशिष्ट विकल्प की जाँच कर सकते हैं।

ये रूपांतरण तकनीकें एक एनम को पठनीय नामों, संग्रहीत संख्याओं और संयुक्त फ़्लैग सेटों के बीच आसानी से स्थानांतरित करने की अनुमति देती हैं,ping कार्यक्रम का शेष भाग टाइप-सुरक्षित और समझने में आसान है।

अक्सर पूछे जाने वाले प्रश्न

एक एनम वेरिएबल का डिफ़ॉल्ट मान 0 होता है, जो उस सदस्य के मान से मेल खाता है जिसका मान 0 होता है। यदि किसी भी सदस्य का मान 0 नहीं है, तो वेरिएबल का मान भी 0 ही रहता है, इसलिए डेवलपर्स अक्सर भ्रम से बचने के लिए पहले None या Unknown सदस्य परिभाषित करते हैं।

एक const एक नाम वाले मान को परिभाषित करता है, जबकि एक enum संबंधित नाम वाले स्थिरांकों के समूह को एक ही प्रकार के अंतर्गत रखता है। enums टाइप सेफ्टी भी प्रदान करते हैं, क्योंकि एक वेरिएबल केवल enumeration के परिभाषित सदस्यों में से एक को ही धारण कर सकता है।

जी हां। एक एनम को नेमस्पेस के अंदर या किसी क्लास या स्ट्रक्चर के भीतर नेस्टेड रूप में घोषित किया जा सकता है, जिससे उसका स्कोप उस प्रकार तक सीमित हो जाता है। हालांकि, C# किसी मेथड बॉडी के अंदर एनम को घोषित करने की अनुमति नहीं देता है।

हाँ। दो या दो से अधिक सदस्य एक ही मूल संख्या साझा कर सकते हैं, जिससे बाद के नाम पहले नाम के उपनाम बन जाते हैं। तुलना करने पर उन्हें समान माना जाता है, और उस मान को स्ट्रिंग में परिवर्तित करने पर एनम में सबसे पहले परिभाषित नाम प्राप्त होता है।

एनम एक वैल्यू टाइप है, इसलिए यह अपना डेटा सीधे स्टोर करता है, न कि हीप पर रेफरेंस के रूप में। यह System.Enum से इनहेरिट होता है, लेकिन अंदर से इंटीग्रल टाइप की तरह व्यवहार करता है, जिससे एनम वैल्यू को कॉपी करना और उनकी तुलना करना तेज़ हो जाता है।

जी हां। ML.NET में आप एक एनम को श्रेणीबद्ध फ़ीचर या लेबल से मैप कर सकते हैं, अक्सर इसे इसके पूर्णांक मान या वन-हॉट एन्कोडिंग में परिवर्तित करके। स्ट्रॉन्गली टाइप्ड एनम मशीन लर्निंग पाइपलाइन के इनपुट कॉलम को स्पष्ट और सुसंगत बनाए रखते हैं।

हाँ। GitHub Copilot Visual Studio के अंदर Enum.TryParse जैसे पूर्ण enum परिभाषाओं, कस्टम मानों, Flags विशेषताओं और रूपांतरण सहायकों का सुझाव देता है। VS Code. Revप्रत्येक सुझाव को ध्यान से देखें, क्योंकि कोपायलट ऐसे मान या नाम चुन सकता है जो आपके डोमेन के अनुरूप न हों।

Enum.IsDefined विधि का उपयोग करें, जो किसी दिए गए नंबर या नाम के परिभाषित सदस्य से मेल खाने पर true लौटाती है। इसे Enum.TryParse के साथ उपयोग करने से आप टेक्स्ट को एनम मान में परिवर्तित करने से पहले उपयोगकर्ता इनपुट को सुरक्षित रूप से मान्य कर सकते हैं।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: