परिचय: enum बिना int के — कॉफी बिना कैफीन के जैसा है?
\n\nएक स्थिति की कल्पना करें: आप C# में शानदार कोड लिख रहे हैं, ऑर्डर स्टेटस, सप्ताह के दिन या एक्सेस लेवल को स्टोर करने के लिए enum का उपयोग कर रहे हैं। सब कुछ सुंदर और पढ़ने में आसान है। लेकिन अचानक एक काम आता है: इस वैल्यू को डेटाबेस में सेव करना, HTTP API के ज़रिए भेजना या बस लॉग में प्रिंट करना। और यहाँ आप एक दीवार से टकराते हैं — enum को int में बदलना ज़रूरी है।
यह सिर्फ एक किताबी 'इच्छा' नहीं है। Stack Overflow के आंकड़ों के अनुसार, 'C# में enum से int वैल्यू प्राप्त करें' सवाल लाखों बार देखा गया है। अनुभवी डेवलपर्स भी कभी-कभी भ्रमित हो जाते हैं: कास्टिंग? Convert.ToInt32? और अगर बेस इंटीजर टाइप int नहीं है तो?
इस लेख में, हम C# में enum से पूर्णांक मान प्राप्त करने के सभी वैध तरीकों पर चर्चा करेंगे। सरल टाइप कास्टिंग से लेकर Unsafe.As जैसी एडवांस ट्रिक्स तक (हाँ, यह भी मौजूद है!)। आप जानेंगे कि कौन सा तरीका सबसे तेज़ है, कौन सा सबसे सुरक्षित है, और किसे प्रोडक्शन में इस्तेमाल नहीं करना चाहिए।
1. C# में enum कैसे काम करता है: एक त्वरित समीक्षा
\n\nकन्वर्ट करने से पहले, बुनियादी बातें याद कर लें। C# में enum एक वैल्यू-टाइप है जो System.Enum से इनहेरिट करता है, और इसका डिफ़ॉल्ट बेस टाइप (underlying type) int है। लेकिन आप स्पष्ट रूप से दूसरा टाइप भी निर्दिष्ट कर सकते हैं:
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 में कास्ट करने से एरर या डेटा लॉस हो सकता है।
2. तरीका #1: स्पष्ट कास्टिंग (cast) — क्लासिक तरीका
\n\nसबसे स्पष्ट और तेज़ तरीका है टाइप कास्टिंग ऑपरेटर का उपयोग करना। यह तब काम करता है जब आप निश्चित रूप से जानते हैं कि बेस टाइप int है।
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
- अगर बेस टाइप
intनहीं है, तो कंपाइलर एरर या चेतावनी देगा। \n longयाbyteके साथ परिभाषितenumपर काम नहीं करता (डबल कास्ट की ज़रूरत होती है)। \n
कब उपयोग करें: 90% मामलों में, जब आपका enum मानक (: int) है।
3. तरीका #2: Convert.ToInt32 — सार्वभौमिक समाधान
\n\nमेथड Convert.ToInt32() कन्वर्ट करने का एक स्विस आर्मी चाकू है। यह object स्वीकार करता है और IConvertible इंटरफ़ेस के ज़रिए इसे int में बदलने का प्रयास करता है।
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
- अगर enum नहीं दिया गया तो
InvalidCastExceptionफेंक सकता है। \n
कब उपयोग करें: जब आप जेनेरिक कोड लिख रहे हों या ऐसे enum के साथ काम कर रहे हों जिसका बेस टाइप कंपाइल टाइम पर ज्ञात न हो।
\n\n4. तरीका #3: GetHashCode() — खतरनाक ट्रिक (ऐसा न करें!)
\n\nइंटरनेट पर आपको एक 'शानदार' सलाह मिल सकती है: GetHashCode() का उपयोग करें। हाँ, तकनीकी रूप से यह