2010-12-22 15 views
5

मेरे पास एक ऐसा फ़ंक्शन है जो पैरामीटर के रूप में एनम (The base class) स्वीकार करता है:एक इंट को एक इंट कैसे डाला जाए?

public void SomeFunction(Enum e); 

हालांकि मैं किसी कारण से इसे int में नहीं डाल सकता। मैं गणना मूल्य का नाम प्राप्त कर सकता हूं लेकिन यह अभिन्न प्रतिनिधित्व नहीं है।
मुझे वास्तव में गणना के प्रकार की परवाह नहीं है, मुझे केवल अभिन्न मूल्य की आवश्यकता है। क्या मुझे इसके बजाय एक int पास करना चाहिए? या मैं यहाँ कुछ गलत कर रहा हूँ?

+0

आप वास्तव में कैसे डालने की कोशिश कर रहे हैं? – annakata

+1

@annakata I * अनुमान * '(int) e', जो" प्रकार को परिवर्तित नहीं कर सकता "सिस्टम देता है। '' 'Int' से 'int' ' –

+0

@annakata: क्षमा करें मैंने सोचा कि मैं स्पष्ट हूं। मार्क सही है। –

उत्तर

7

Enum वास्तव में एक enum ... भ्रमित नहीं है। यह एक enum की एक बॉक्स की प्रति है; फिर भी, निम्नलिखित काम करना चाहिए:

int i = (int)(object)e; 

(इस (object) डाली एक बॉक्स जोड़ नहीं करता है, क्योंकि यह पहले से ही बॉक्स्ड है)

यह भी ध्यान रखें कि सभी enums int के आधार पर कर रहे हैं; यह अनबॉक्सिंग चाल गैर-int enums के लिए विफल हो सकती है।

+0

यदि 'एनम' का वास्तविक प्रकार ज्ञात है (उदा। प्रतिबिंब। बाइंडिंगफ्लैग) कोई उस पर डाला जा सकता है और फिर बस इसे पूर्णांक या लंबे मान के रूप में उपयोग कर सकता है। यह enum प्रकारों के लिए काम करेगा जिनके अंतर्निहित प्रकार का उपयोग करने वाले प्रकार से बड़ा नहीं है। – supercat

13
int i = Convert.ToInt32(e); 

अगर enum int32 के अलावा और कुछ में संग्रहित है यह enum की अंतर्निहित भंडारण की परवाह किए बिना काम करेंगे, जबकि अन्य समाधान एक InvalidCastException फेंक देते हैं (जैसे कि, एक byte या short)

संबंधित मुद्दे