2010-04-09 14 views
18

से संबंधित है, मैं यह जांचना चाहता हूं कि कुछ पूर्णांक प्रकार (ए) गणना सदस्य से संबंधित हैं।जांचें कि पूर्णांक प्रकार enum सदस्य

उदाहरण के लिए,

public enum Enum1 
{ 
    member1 = 4, 

    member2 = 5, 

    member3 = 9, 

    member4 = 0 
} 

Enum1 E1 = (Enum1) 4 मुझे देता है member1

Enum1 e2 = (Enum1) 10 मुझे कुछ भी नहीं देता है और मैं इसे जाँच करना चाहते हैं।

+0

वैसे भी एक enum का उपयोग करने के अपने उद्देश्य को नहीं जानते। कोशिश करें कि आप – Amsakanna

+0

के बजाय किसी शब्दकोश का उपयोग कर सकते हैं ... आप क्या देखना चाहते हैं ...? – Ravia

+0

[मान्य एनम वैल्यूज] [http://stackoverflow.com/questions/13615/validate-enum-values) के संभावित डुप्लिकेट – bluish

उत्तर

45

उपयोग Enum.IsDefined

Enum.IsDefined(typeof(Enum1), 4) == true 

लेकिन

Enum.IsDefined(typeof(Enum1), 1) == false 
+4

यदि आपको गति की आवश्यकता होती है तो इसका उपयोग न करें: Enum.IsDefined प्रतिबिंब का उपयोग करता है और ** बहुत * * धीमी – ereOn

+6

सबसे पहले, माइक्रो-ऑप्टिमाइज़ेशन प्रोग्रामिंग प्रयास का अपशिष्ट है। दूसरा, 'Enum.IsDefined' प्रति मिलीसेकंड से 2,000 गुना अधिक चलाएगा। मैं उस धीमी गति पर विचार नहीं करता। –

+0

ईरॉन, मैं इसे तेज़ी से कैसे बना सकता हूं? –

1

आप enum के मानों को देखते हैं और उन्हें पूर्णांक से तुलना करते हैं।

static bool EnumTest(int testVal, Enum e) 
    { 
     bool result = false; 
     foreach (var val in Enum.GetValues(typeof(Enum1))) 
     { 
      if ((int)val == testVal) 
      { 
       result = true; 
       break; 
      } 
     } 
     return result; 
    } 

संपादित: ऐसा लगता है कि सैम की तरह एक better solution है।

1

आप Enum.GetValues ​​उपयोग करने वाले सभी परिभाषित मूल्यों को प्राप्त कर सकते हैं। फिर जांचें कि उस सूची में आपका मूल्य मौजूद है या नहीं।
http://msdn.microsoft.com/en-us/library/system.enum.getvalues.aspx

3

सैम कहते हैं, आप IsDefined का उपयोग कर सकते हैं। हालांकि यह कुछ हद तक अजीब है। आप मेरी Unconstrained Melody पुस्तकालय को देखने के लिए जो आप हमें ऐसा करने हैं चाहते हो सकता है:

Enum1 e2 = (Enum1)10; 
if (e2.IsNamedValue()) // Will return false 
{ 
} 

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

यह Enum.IsDefined बीटीडब्ल्यू से तेज़ होना चाहिए। यह इस समय केवल एक रैखिक स्कैन करता है, लेकिन अगर आपको सुधारने की आवश्यकता है तो मुझे बताएं :) (अधिकांश enums इतने छोटे हैं कि उन्हें शायद HashSet से लाभ नहीं होगा, लेकिन हम एक बाइनरी खोज कर सकते हैं ...)

0
int testNum = 5; 
bool isMember = Enum.GetValues(typeof(Enum1)).Cast<int>().Any(x => x == testNum); 
संबंधित मुद्दे