2012-01-11 22 views
7

मैंने देखा है कि मैं एक ही परियोजना के भीतर यह असंगत रूप से कर रहा हूं। कुछ स्थानों पर, मेरे पास एक ऑलम के साथ एक एनम होगा, और दूसरों में मेरे पास एक शून्य मूल्य के साथ एक नलबल प्रकार होगा जो सभी (या कोई फ़िल्टर नहीं)enums के साथ सभी या शून्य?

मैंने देखा जब मेरे पास था if (Region != null && Region != Regions.ALL) जैसे कुछ लिखने के लिए।

क्या कोई रास्ता या दूसरा जाने का कोई कारण है?

+4

एनम नाम ऊपरी कैमेलकेस – SLaks

+0

होना चाहिए मुझे लगता है कि यह एक ऑब्जेक्ट-रिलेशनल प्रतिबाधा विसंगति मुद्दा है। आवेदन पक्ष में, "ऑल", "ऑल वेस्ट कोस्ट क्षेत्र" और "ऑल ईस्ट कोस्ट क्षेत्र" जैसे विकल्प होने का अर्थ है। हालांकि, मैं अक्सर एसकल्प पैरामीटर के रूप में सीधे int में डाली गई enum का उपयोग कर रहा हूँ। इन तरीकों से, मुझे इन सभी मामलों की जांच करनी होगी और उन्हें उचित SQL में परिवर्तित करना होगा। ("और क्षेत्र = 1" के बजाय मुझे "और क्षेत्र (2, 4, 5)" की आवश्यकता होगी ")। दुर्भाग्यवश, एसक्यूएल पैरामीटर सूचियों के साथ अच्छी तरह से काम नहीं करते हैं। – Serinus

उत्तर

2

कहाँ Enums कि आप या तो एक "सभी" या "अशक्त" प्रकार निर्दिष्ट करने की आवश्यकता, मैं आमतौर पर Flag विशेषता के साथ जाने के लिए और & और | बिटवाइज़ का उपयोग करें। यह एक बहुत अधिक लचीला समाधान है।

एक निरर्थक प्रकार बनाने या एक विकल्प होने के नाते "सभी" होने के नाते, मुझे लगता है कि अगर यह आपको समझ में आता है, तो मुझे इसके साथ कोई समस्या नहीं दिखाई देती है। मैं सिर्फ झंडे का उपयोग करना पसंद करते हैं।

+0

एक 'सभी' सदस्य '[ध्वज]' enums के लिए भी उपयोगी है ... कोई नियम नहीं है कि सभी झंडे परस्पर अनन्य होना चाहिए। –

+0

@ बेनवोइग - पूरी तरह से। जब मेरे पास इस तरह के लगातार संयोजन होते हैं, तो मैं एक 'सभी = 0x111' या जो कुछ भी करूंगा। आप 'पिज्जा एंडब्रेडस्टिक्स = 0x101' जैसे कुछ भी कर सकते हैं यदि यह लगातार कॉम्बो है जिसे आप एक स्पष्ट परिभाषा चाहते हैं। –

7

Regions.All का उपयोग करना अर्थ स्पष्ट रूप से कहने के रूप में अधिक स्पष्ट है। आप null पर इसका अर्थ "असाइन" कर सकते हैं, और कंप्यूटर इसके साथ ठीक रहेगा। आपके प्रोग्राम के पाठक, हालांकि, null एनम मान का उपयोग करने या अपनी टिप्पणियों को पढ़ने के तरीके से इसका मतलब है कि इसका अर्थ यह है कि इसका अर्थ है। दूसरी ओर, Regions.All, स्वयं-दस्तावेज और आत्म-व्याख्यात्मक है।

2

आम तौर पर, हम 'निर्दिष्ट नहीं' या 'अस्तित्वहीन' या 'गैर-लागू' होने के लिए null का उपयोग करते हैं। तो, फ़िल्टर के मामले में, यह शून्य के लिए अनुमति देने के लिए समझ में आता है, क्योंकि इसका मतलब है 'फ़िल्टरिंग नहीं'।

इसके अलावा, एक enum बुलाया Regions शायद की तरह Northeast, Southeast, Midwest, Southwest, और West मान होते हैं। अब, अगर मैं गलत हूं तो कृपया मुझे सही करें, लेकिन मुझे नहीं लगता कि संयुक्त राज्य अमेरिका में "ऑल" नामक कोई भी क्षेत्र है। मेरे कई वर्षों के दौरान वहां रहने के दौरान मैंने पश्चिम में मौसम के मौसम और दक्षिणपूर्व में मौसम के बारे में टीवी पर मौसम यात्री को सुना, लेकिन किसी भी जगह "मौसम" नामक मौसम में कभी मौसम नहीं सुना। इसलिए, मुझे विश्वास है कि ऐसा कोई क्षेत्र नहीं है। इसलिए, क्षेत्रों के एक enum में "सभी" सहित एक हैक है। अचानक, Regions enum क्षेत्रों के बारे में नहीं है; इसके बजाय यह क्षेत्रों और/या फ़िल्टरिंग के बारे में है। इस प्रकार के अर्थ में बदलाव कुछ प्रोग्रामिंग में और आमतौर पर टालने के लिए जागरूक हैं।

+0

मैं कभी भी एक enum चर के लिए शून्य असाइन करने के साथ असहमत हूं। 'कोई नहीं' या 'ऑल' का मान बनाने में कुछ भी नहीं लगता है जो इस संदर्भ में वास्तव में 'शून्य' का अर्थ है। –

+0

@ हैंड-ई-फूड हां, बेशक इसमें कुछ भी नहीं लगता है। और फिर आपके पास 'क्षेत्रीय प्रबंधक' वस्तुओं की एक सूची है जिसमें से प्रत्येक में 'क्षेत्र' फ़ील्ड है, और यह एक क्षेत्रीय प्रबंधक है जो 'कोई नहीं' या 'ए' नामक एक क्षेत्र नामक क्षेत्र का प्रबंधन करता है।बधाई हो, आपने अभी एक मौलिक डेटा अखंडता सिद्धांत पर बलात्कार किया है। –

+0

मैं अब आपका मुद्दा देखता हूं कि एक अलग गणना के लिए अनिश्चित सदस्यों को जोड़ना असंगत है। कुछ 'शून्य' का उपयोग करके मेरे साथ सही नहीं बैठता है, लेकिन यह मुझे सोच रहा है। –

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