2008-10-16 12 views

उत्तर

15

एक अलग जवाब देने के लिए ... जबकि मूल्यों प्रकार सुरक्षित कास्टिंग नजरिए से कर रहे हैं, वे अभी भी अनियंत्रित हो जाते हैं डाले जा चुके हैं - यानी

enum Foo { A = 1, B = 2, C = 3 }  
static void Main() 
{ 
    Foo foo = (Foo)500; // works fine 
    Console.WriteLine(foo); // also fine - shows 500 
} 

इस कारण से, आप ले जाना चाहिए मानों की जांच करने के लिए देखभाल - उदाहरण के लिए defaultswitch में जो अपवाद फेंकता है।

तुम भी जाँच कर सकते हैं (गैर [Flags] मूल्यों के लिए) के माध्यम से:

bool isValid = Enum.IsDefined(typeof(Foo), foo); 

+0

+1। – OregonGhost

+0

ओह, यह एक अच्छी टिप है। मुझे यह नहीं पता था .. हमेशा माना जाता है कि यह एक अवैध कैस्ट अपवाद या कुछ फेंक देगा। निश्चित रूप से मुझसे +1! –

+0

+1। Enum.IsDefined एक महान unsung नायक है ... –

11

हां वे हैं।

निम्नलिखित से http://www.csharp-station.com/Tutorials/Lesson17.aspx

Enums दृढ़ता से स्थिरांक लिखे जाने पर है। वे अनिवार्य रूप से अद्वितीय प्रकार हैं जो आपको प्रतीकात्मक नामों को अभिन्न मूल्यों को असाइन करने की अनुमति देते हैं। सी # परंपरा में, वे दृढ़ता से टाइप किए जाते हैं, जिसका अर्थ है कि एक प्रकार का एक enum किसी अन्य प्रकार के enum को निहित नहीं किया जा सकता है, भले ही उनके सदस्यों का अंतर्निहित मूल्य समान हो। समान रेखाओं के साथ, अभिन्न प्रकार और enums स्पष्ट रूप से अंतर परिवर्तनीय नहीं हैं। विभिन्न enum प्रकारों और अभिन्न प्रकारों के बीच सभी असाइनमेंट एक स्पष्ट कलाकार की आवश्यकता है।

0

Yes they are

Enums दृढ़ता से स्थिरांक टाइप किया जाता है। वे अनिवार्य रूप से अद्वितीय प्रकार हैं जो आपको प्रतीकात्मक नाम अभिन्न मानों को असाइन करने की अनुमति देते हैं। सी # परंपरा में, वे दृढ़ता से लिखे जाते हैं, जिसका अर्थ है कि एक प्रकार का एक enum परोक्ष एक और प्रकार का एक enum करने के लिए आवंटित नहीं किया जा सकता है, भले ही अपने सदस्यों के अंतर्निहित कीमत ही हैं। उसी लाइन के साथ, अभिन्न प्रकार और enums स्पष्ट रूप से विनिमय करने योग्य नहीं हैं। सभी विभिन्न enum प्रकारों और अभिन्न प्रकारों के बीच असाइनमेंट को स्पष्ट कलाकारों की आवश्यकता होती है।

+0

पुन: अभिन्न प्रकार: शाब्दिक 0 को छोड़कर, जो * अंतर्निहित है। Enum.IsDefined टिप के लिए –

0

हां।

सी #: enum प्रकार: नामित मूल्यों की

-एक प्रकार सुरक्षित गणन।

-Prevents प्रोग्रामिंग त्रुटियों

-उपयोगकर्ता अंतर्निहित प्रकार नियंत्रित कर सकते हैं (चूक int करने के लिए)

-भी अंतर्निहित मूल्यों

नियंत्रित कर सकते हैं
0

तकनीकी तौर पर कोई क्योंकि आप इसके आधार मूल्य के रूप में एक Enum प्रतिनिधित्व कर सकते हैं (int, लंबा, आदि)। हालांकि, यदि आप सुनिश्चित करते हैं कि आप केवल अपने प्रदत्त नामों से enum का उपयोग करते हैं, तो आप संकलन समय त्रुटियों को प्राप्त करेंगे यदि आप इसके संदर्भों को अपडेट किए बिना एक गणना मूल्य का नाम बदलते हैं। इस संबंध में हाँ यह सुरक्षित प्रकार है।

0

मैं पार्टी यहाँ करने के लिए देर हो रही है, लेकिन मैं एक छोटे से कुछ अतिरिक्त बाहर फेंक करना चाहता था ... Krzysztof Cwalina से .NET Framework Design Guidelines के लिए एक अद्यतन। यह सुनिश्चित करने के लिए ऊपर दिए गए उत्कृष्ट टिप के अलावा, आपके एम्स को वैध मान पास करने के लिए, यह प्रभावी ढंग से उनका उपयोग कैसे करें, विशेष रूप से Flags enums),

2

का उपयोग करने के लिए अन्य मार्गदर्शन और सलाह प्रदान करता है। उन लोगों के लिए जो Enum.Is का उपयोग करने का सुझाव देते हैं, तर्क सत्यापन करने के लिए परिभाषित ... नहीं! प्रति ब्रैड अब्राम (Framework Design Guidlines Update on Enum Design से):

Enum.IsDefined() के साथ वास्तव में दो समस्याएं हैं। सबसे पहले यह प्रतिबिंब और ठंडा प्रकार मेटाडाटा का एक गुच्छा लोड करता है जो इसे एक भ्रामक रूप से महंगा कॉल बनाता है। दूसरा, जैसा कि नोट यहां इंगित करता है वहां एक संस्करण समस्या है।

+0

अच्छी कॉल; मैंने उस पूरे नोट को अपने पहले पढ़ने में याद किया। –

+0

@ जॉन रूडी: धन्यवाद! मैं पहले से ही उन मुद्दों के बारे में जानता था, लेकिन इसके बारे में कुछ दस्तावेज को इंगित करने में सक्षम होना अच्छा है, खासकर एक उदाहरण के साथ। –

0

हाँ वे r दृढ़ता से टाइप सफ़ेद यू यह expilcitly Dat जैसे enum दिनों कर integeral मूल्य के लिए enum लगातार चर के impilcit रूपांतरण यू hv 2 ऐसा नहीं करता है नहीं कर सकते हैं { सूरज, सोमवार } पूर्णांक ई = (int) days.sun; कंसोल। राइटलाइन (ई);

0

सी # enums, प्रकार सुरक्षित अर्थ

  1. आप परोक्ष अंतर्निहित प्रकार से परिवर्तित नहीं कर सकते वास्तविक enum
  2. इसके अलावा करने के लिए, यदि आप किसी अन्य enum करने के लिए एक enum का मान निर्दिष्ट नहीं कर सकते हैं और भी अंतर्निहित प्रकार यद्यपि दोनों enums के समान हैं। एक स्पष्ट कलाकार हमेशा की आवश्यकता होती है।
  3. Enums आपके कोड को अधिक पठनीय और अधिक रखरखाव बनाते हैं।

मैं अपने प्रकार की सुरक्षित प्रकृति को अपनाने वाले enums पर एक उत्कृष्ट वीडियो ट्यूटोरियल में आया हूं। here और there देखें।

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