2010-04-12 19 views
7

मुझे अपने सी # एप्लिकेशन में इस enum का उपयोग करने की आवश्यकता है, लेकिन यह मुझे इन मानों का उपयोग करने नहीं देगा। जब मैं यूंट के रूप में टाइप निर्दिष्ट करता हूं तो मैं -1 मान का उपयोग कर सकता हूं, और जब मैं int निर्दिष्ट करता हूं तो मैं पिछले 2 मानों का उपयोग नहीं कर सकता। क्या इन सभी मूल्यों को परिभाषित करने की अनुमति देने के लिए यहां अनचेक किए गए कीवर्ड का उपयोग करने का कोई तरीका है? ये मान बाहरी स्रोत से आ रहे हैं, इसलिए मैं उन्हें बदल नहीं सकता।मैं एनम में असुरक्षित मूल्यों का उपयोग कैसे करूं?

internal enum MyValues : int 
{ 
    value1 = -1, 
    value2 = 0, 
    value3 = 0x80000000, 
    value4 = 0xFFFFFFFF 
} 

उत्तर

9

यदि आप 0xFFFFFFFF से भिन्न मान के लिए चाहते हैं, तो आपको 32 बिट्स से अधिक डेटाटाइप की आवश्यकता होगी। long आज़माएं।

+0

एक 64 बिट डेटा प्रकार का उपयोग करना है एक विकल्प नहीं है, मैं 32 बिट मान वापस करने के लिए इंटरऑप का उपयोग कर रहा हूं। –

+0

यदि -1 और 0xFFFFFFFF तकनीकी रूप से एक ही चीज़ का उपयोग करते समय एक ही बात है, तो मुझे लगता है कि मैं केवल -1 मान हटा सकता हूं? –

+1

@ जोन: -1 जब आप यूंट का उपयोग कर रहे हों तो मौजूद नहीं है - आपको एक अनचेक रूपांतरण करना होगा। –

1

शायद int के बजाय उलझन में प्रयास करें?

2

चूंकि ये मान निरंतर दिखते हैं, तो मानों को रखने के लिए केवल एक स्थिर वर्ग बनाएं। इसके अलावा, आप जो कुछ भी प्रकार आप चाहते हैं का उपयोग कर सकते हैं: है इस को हल करने के

public static class MyValues 
{ 
    public const int value1 = -1; 
    public const int value2= 0; 
    public const int value3 = 0x80000000; 
    public const int value4 = 0xFFFFFFFF; 
} 
2

एक ही रास्ता के लिए सामान्य मूल्यों का उपयोग करने के enum (0, 1, 2, 3), और एक वर्ग या करने के तरीकों की एक जोड़ी बनाने के आने वाले मानों को enum सदस्यों और इसके विपरीत में परिवर्तित करें।

+0

इस बड़ी लंबी पोस्ट को लिखा और फिर देखा कि आपने वही बात कहा है। +1। @ जोन टैकबरी: @ जोन सेगेल का जवाब सबसे अधिक रखरखाव विकल्प है। मान लें कि -1 0xFFFFFFFF जैसा नहीं है जब तक कि आपके द्वारा उपयोग की जा रही लाइब्रेरी का बहुत अंतरंग ज्ञान न हो। – Randolpho

3

0xFFFFFFFF एक 32 बिट संख्या है, इसलिए यह enum करने के लिए फिट होना चाहिए: int (मुझे लगता है लंबे प्रकार एक overkill :) है)

आप की कोशिश की

enum YourEnum : int { /*...*/, value4 = unchecked((int)0xFFFFFFFF) }; 
संबंधित मुद्दे

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