C# में enum से int कैसे प्राप्त करें: शुरुआत से विशेषज्ञ तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: enum बिना int के — कॉफी बिना कैफीन के जैसा है?

\n\n

एक स्थिति की कल्पना करें: आप C# में शानदार कोड लिख रहे हैं, ऑर्डर स्टेटस, सप्ताह के दिन या एक्सेस लेवल को स्टोर करने के लिए enum का उपयोग कर रहे हैं। सब कुछ सुंदर और पढ़ने में आसान है। लेकिन अचानक एक काम आता है: इस वैल्यू को डेटाबेस में सेव करना, HTTP API के ज़रिए भेजना या बस लॉग में प्रिंट करना। और यहाँ आप एक दीवार से टकराते हैं — enum को int में बदलना ज़रूरी है।

\n\n

यह सिर्फ एक किताबी 'इच्छा' नहीं है। Stack Overflow के आंकड़ों के अनुसार, 'C# में enum से int वैल्यू प्राप्त करें' सवाल लाखों बार देखा गया है। अनुभवी डेवलपर्स भी कभी-कभी भ्रमित हो जाते हैं: कास्टिंग? Convert.ToInt32? और अगर बेस इंटीजर टाइप int नहीं है तो?

\n\n

इस लेख में, हम C# में enum से पूर्णांक मान प्राप्त करने के सभी वैध तरीकों पर चर्चा करेंगे। सरल टाइप कास्टिंग से लेकर Unsafe.As जैसी एडवांस ट्रिक्स तक (हाँ, यह भी मौजूद है!)। आप जानेंगे कि कौन सा तरीका सबसे तेज़ है, कौन सा सबसे सुरक्षित है, और किसे प्रोडक्शन में इस्तेमाल नहीं करना चाहिए।

\n\n

1. C# में enum कैसे काम करता है: एक त्वरित समीक्षा

\n\n

कन्वर्ट करने से पहले, बुनियादी बातें याद कर लें। C# में enum एक वैल्यू-टाइप है जो System.Enum से इनहेरिट करता है, और इसका डिफ़ॉल्ट बेस टाइप (underlying type) int है। लेकिन आप स्पष्ट रूप से दूसरा टाइप भी निर्दिष्ट कर सकते हैं:

\n\n
public enum Status : byte\n{\n    New = 0,\n    Active = 1,\n    Closed = 2\n}\n\npublic enum Priority : long\n{\n    Low = 10,\n    Medium = 50,\n    High = 100\n}
\n\n

यह महत्वपूर्ण है! अगर आपका enum byte या long का उपयोग करता है, तो सीधे int में कास्ट करने से एरर या डेटा लॉस हो सकता है।

\n\n

2. तरीका #1: स्पष्ट कास्टिंग (cast) — क्लासिक तरीका

\n\n

सबसे स्पष्ट और तेज़ तरीका है टाइप कास्टिंग ऑपरेटर का उपयोग करना। यह तब काम करता है जब आप निश्चित रूप से जानते हैं कि बेस टाइप int है।

\n\n
enum Day { Monday = 1, Tuesday = 2, Wednesday = 3 }\n\nDay today = Day.Tuesday;\nint dayValue = (int)today; // परिणाम: 2\n\nConsole.WriteLine(dayValue); // आउटपुट: 2
\n\n

फायदे:

\n
    \n
  • अधिकतम प्रदर्शन — कंपाइलर एक IL इंस्ट्रक्शन जनरेट करता है।
  • \n
  • सरलता और पठनीयता।
  • \n
\n

नुकसान:

\n
    \n
  • अगर बेस टाइप int नहीं है, तो कंपाइलर एरर या चेतावनी देगा।
  • \n
  • long या byte के साथ परिभाषित enum पर काम नहीं करता (डबल कास्ट की ज़रूरत होती है)।
  • \n
\n\n

कब उपयोग करें: 90% मामलों में, जब आपका enum मानक (: int) है।

\n\n

3. तरीका #2: Convert.ToInt32 — सार्वभौमिक समाधान

\n\n

मेथड Convert.ToInt32() कन्वर्ट करने का एक स्विस आर्मी चाकू है। यह object स्वीकार करता है और IConvertible इंटरफ़ेस के ज़रिए इसे int में बदलने का प्रयास करता है।

\n\n
enum Status { New = 0, Active = 1, Closed = 2 }\n\nStatus current = Status.Active;\nint statusCode = Convert.ToInt32(current); // परिणाम: 1\n\nConsole.WriteLine(statusCode); // 1
\n\n

फायदे:

\n
    \n
  • किसी भी बेस टाइप (byte, short, long आदि) के साथ काम करता है।
  • \n
  • enum के टाइप के बारे में स्पष्ट जानकारी की आवश्यकता नहीं है।
  • \n
\n

नुकसान:

\n
    \n
  • डायरेक्ट कास्ट से धीमा (वर्चुअल मेथड कॉल)।
  • \n
  • अगर enum नहीं दिया गया तो InvalidCastException फेंक सकता है।
  • \n
\n\n

कब उपयोग करें: जब आप जेनेरिक कोड लिख रहे हों या ऐसे enum के साथ काम कर रहे हों जिसका बेस टाइप कंपाइल टाइम पर ज्ञात न हो।

\n\n

4. तरीका #3: GetHashCode() — खतरनाक ट्रिक (ऐसा न करें!)

\n\n

इंटरनेट पर आपको एक 'शानदार' सलाह मिल सकती है: GetHashCode() का उपयोग करें। हाँ, तकनीकी रूप से यह

ब्लॉग

पुस्तक अनुशंसाएँ