2010-04-16 12 views
6

मैंने देखा कि कुछ गणनाओं में एक गणना सदस्य के रूप में "कोई नहीं" है।क्यों कुछ लोग गणित सदस्य के रूप में "कोई नहीं" का उपयोग करते हैं?

उदाहरण के लिए मैं

enum Mode 
{ 
    Mode1 = 1, 
    Mode2 = 2, 
    Mode3 = 3, 
    None = 4 
} 

क्या मतलब है क्यों वे इसे प्रयोग करते हैं? किसी भी सदस्य के साथ समाधान किस मामले में अधिक बेहतर (कम बेहतर) है?

उत्तर

4

तार्किक रूप से None एक मान्य विकल्प हो सकता है (अपने गणन के अर्थ पर निर्भर करता है) -> एक स्विच मामले में एक अलग शाखा हो सकता था (यकीनन - नहीं हमेशा एक None विकल्प भावना बनाता है)

एक None होने के बारे में विकल्प Nullable<Mode> चर: मैं None के लिए स्थिरता के लिए जाऊंगा: यदि आपके पास 3 मान्य विकल्प हैं और None उनमें से एक है, तो इसका अलग-अलग क्यों व्यवहार करें?

और यदि आप None विकल्प चुनते हैं या नहीं, तो आपके पास हमेशा एक enum मान 0 (डिफ़ॉल्ट विकल्प) के रूप में मैप किया जाना चाहिए। हंस केस्टिंग द्वारा प्रदत्त link 0:

एक गैर-प्रारंभिक गणना का डिफ़ॉल्ट मान, अन्य मान प्रकारों की तरह शून्य मान के रूप में एक मैप मैप किया गया है। गैर-झंडे को गणना की गई गणना को सदस्य के शून्य के साथ परिभाषित करना चाहिए ताकि डिफ़ॉल्ट मान गणना का मान्य मान हो। यदि उपयुक्त हो, तो सदस्य 'कोई नहीं' नाम दें। अन्यथा, सबसे अधिक इस्तेमाल किए गए सदस्य को शून्य असाइन करें। ध्यान दें कि यदि पहले गणना सदस्य का मान घोषणा में सेट नहीं है, तो इसका मान डिफ़ॉल्ट रूप से शून्य है।

+0

मैंने आपके उत्तर को उपयोगी के रूप में चिह्नित किया है। –

11

[Flags] enums के लिए कोई भी महत्वपूर्ण नहीं है, और मूल्य 0 होना चाहिए। अन्यथा ... संदिग्ध। एक Nullable<Mode> भी पर्याप्त होगा। लेकिन None उनकी सीरियलाइजेशन या ओआरएम परतों के लिए मांग की जा सकती है (यह एक अपेक्षित स्ट्रिंग/इंट-वैल्यू इत्यादि के लिए मानचित्र हो सकती है)। या यह सिर्फ एपीआई को सरल बना सकता है।

4

यह कोड विश्लेषण नियम द्वारा आवश्यक है, आधिकारिक कारण के लिए http://msdn.microsoft.com/en-us/library/ms182149(VS.100).aspx देखें।

+0

(पुनः गैर-झंडे enums) pah ... अगर "0" पहले से ही मेरे enum के लिए एक वैध मामला नहीं है, तो मेरे पास एक नहीं है। मैं खुद मान्य मानों की जांच करूंगा, टा। मुझे ** हर दूसरे ** मूल्य की जांच करने की आवश्यकता है जिसे परिभाषित नहीं किया गया है: 0 डिफ़ॉल्ट क्यों होना चाहिए क्योंकि यह डिफ़ॉल्ट है? 1124521 * बस * अमान्य (संभवतः) के रूप में है। –

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