2010-02-09 10 views
7

मैं एक enum है, जो है के साथ Enum उपयोग कैसे करें:अतिरिक्त विकल्प (सभी, कोई नहीं)

  • एक संपत्ति के रूप में मेरी कक्षा में शामिल किया गया है
  • यह एक डेटाबेस तालिका से कुछ मान का प्रतिनिधित्व करता है (एक जोड़ी प्रकार के)
  • यह, Dropbox में दिखाया गया है इतना है कि यह एक फिल्टर

अब मैं इस ड्रॉपबॉक्स पर 'सभी' (या उदाहरण के लिए 'कोई नहीं') मूल्य जोड़ना चाहते हैं के रूप में इस्तेमाल किया जा सकता है।

मैं इस करना चाहिए कैसे:

  • ऐड 'सभी' Enum के लिए मूल्य?
  • ऐड 'सभी' ड्रॉपबॉक्स पर मूल्य, स्ट्रिंग
  • कुछ अन्य विकल्प के लिए Enum से मेरी संपत्ति का परिवर्तन प्रकार का ...

उत्तर

6
एक और जवाब पर

Codesleuth टिप्पणी मुझे सवाल फिर से पढ़ने के बने होते हैं और यहाँ एक है अद्यतन करें।

यदि आप एकाधिक संयोजन के लिए जा रहे हैं तो flags enumeration के उपयोग पर विचार करें। आपके मामले में इसका मतलब यह होगा कि प्रकार के किसी भी संयोजन का चयन एक वैध इनपुट है।

[Flags] 
enum MyTypes 
{ 
    None = 0, 
    One = 1, 
    Two = 2, 
    Three = 4, 
    Four = 8, 
    All = One | Two | Three | Four 
} 

उपयोगकर्ता केवल एक ही प्रकार का चयन कर सकते या सभी प्रकार तो एक सामान्य गणना का उपयोग करते हैं:

enum MyType 
{ 
    None, 
    One, 
    Two, 
    Three, 
    Four, 
    All 
} 
+0

आमतौर पर, enum मान डेटाबेस के भीतर एक रिकॉर्ड के अनुरूप होते हैं। इस मामले में, डेटाबेस में सभी कैसे संग्रहीत किए जाएंगे? मैं अलग-अलग अभिन्न मूल्यों के साथ सभी और कोई भी प्रतिनिधित्व करने का सुझाव देता हूं, अन्यथा, जब कोई नया enum मान जोड़ा जाता है, तो सभी को enum और डेटाबेस के भीतर अपडेट करने की आवश्यकता होगी जिसका अर्थ है रखरखाव – Breakskater

2

IMHO, यह तो की तरह अपने enum करने के लिए एक 'सभी' मान जोड़ने के लिए सबसे अच्छा है:

enum SampleEnum 
{ 
    Value1 = 1, 
    Value2 = 2, 
    Value3 = 4, 
    All = Value1 | Value2 | Value3 
} 

इस तरह, आप अपने बता गया में दिखाया गया आइटम के बारे में परवाह करने की जरूरत नहीं होगी, और आप अपने कोड में है कि मूल्य के चयन के लिए प्रतिक्रिया कर सकते हैं कि यदि आवश्यक हो तो होना चाहिए ...

+०१२३५१६४१०
+0

+1, मैं सहमत हूं। यदि आपके पास कभी भी अन्य मूल्यों के संयोजन के लिए कोई उपयोग नहीं है, तो यह सबसे अच्छा तरीका है। – Codesleuth

+0

आपको ध्वज विशेषता का उपयोग करने की आवश्यकता नहीं है? – sventevit

+0

@_simon_: FlagsAttribute केवल जानकारीपूर्ण है। मैं इसे शामिल करने का सुझाव देता हूं, हालांकि, जब भी आप enum मानों को गठबंधन करना चाहते हैं (यानी उन्हें झंडे के रूप में उपयोग करें)। मुझे यकीन नहीं है कि यह संयुक्त मूल्यों के लिए ToString() व्यवहार को बदलता है या नहीं। – OregonGhost

1

मैं एक चाल है, तो आप इसे अपने ब्लॉग पर देख सकते हैं: Enum Trick

सर्वश्रेष्ठ अभ्यास कोई नहीं या शून्य अज्ञात के रूप में शामिल करने के लिए है (0)।

'ऑल' की गणना सभी मानों के योग के रूप में की जाती है।

[Flags] 
public enum MyTypes 
{ 
    None = 0, 
    One = 1, 
    Two = 2, 
    Three = 4, 
    Four = 8, 
    Last, 
    All = (Last << 1) - 3, 
} 

अब, जब आप मान जोड़ते हैं, 'ऑल' भी अपडेट किया जाता है (कोई परिवर्तन आवश्यक नहीं है)।

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