2008-11-29 29 views
13

के बराबर होती है है मैं एक enumचेक अगर एक enum एक क्षेत्र है कि एक स्ट्रिंग

public enum FileExtentions { 
    mp3, 
    mpeg 
} 

है और मैं एक FileInfo जिनमें से मैं अगर विस्तार पिछले enum में है की जाँच करना चाहते हैं। मुझे उम्मीद थी कि मैं एक

FileExtensions.Any(e=>e.ToString().Equals(file.Extension)); 

कर सकता है लेकिन वह भी भयानक हो गया होता। कोई विचार?

उत्तर

21

Any ... Equals के पीछे कारण क्या है? क्या आपने Contains को अनदेखा किया था?

bool result = Enum.GetNames(typeof(FileExtensions)).Contains("mp3"); 
+0

आप सही हैं: पी –

+0

इसके लिए 'System.Linq' का उपयोग करने की आवश्यकता है, सही? –

8

जबकि दबाने प्रस्तुत मैं अपने आप को इस सवाल का जवाब के बारे में सोचा:

Enum.GetNames(typeof(FileExtensions)).Any(f=>f.Equals("."+file.Extension)) 
+0

लेकिन आप उत्तर के रूप में अपनी प्रविष्टि को चिह्नित नहीं कर सकते हैं। लेकिन यह तर्कसंगत है मुझे लगता है। –

+0

फ़ाइल। एक्सटेंशन में अग्रणी अवधि है - enum नाम नहीं। ऐसा नहीं होना चाहिए (f => ("।" + F) .quals (file.Extension))? –

+0

आपने पोस्ट की मेरी समस्या के लिए मुझे जवाब खोजने में मदद की: सार्वजनिक enum कुछ {जॉन, रोब, टिम} var msg = "मुझे टिम पसंद है, वह अच्छा है"; var isOk = Enum.GetNames (टाइपऑफ (कुछ))। कोई भी (x => msg.Contains (x.ToString())); –

0

आप ऐसा कर सकते हैं System.Enum प्रकार के साथ:

string extension = Enum.GetName(typeof(FileExtensions), FileExtensions.mp3); 

if (extension == file.Extension) 
    // do something here 

अद्यतन:

आह, मैं गलत समझा जाता है कि आप विस्तार के लिए संपूर्ण enum जांचना चाहते हैं और यह नहीं कि एक विशिष्ट enum मान एक्सटेंशन से मेल खाता है। उस स्थिति में, के साथ आपका दृष्टिकोण GetNames() मार्ग है - क्षमा करें, आप अपने स्वयं के प्रश्न के लिए स्वीकार किए गए अपने उत्तर को चिह्नित नहीं कर सकते हैं। ;-)

+0

यह जांच करेगा कि मेरी फ़ाइल में वह सटीक एक्सटेंशन है या नहीं।अगर मैं इसे देखना चाहता था, तो मैं भी कर सकता हूं (file.Extension.equals (FileExtensions.Mp3.ToString()) [untested] –

1

आप निम्न विस्तार विधि के साथ FileInfo प्रकार का विस्तार कर सकते हैं:

public static bool HasExtension(this FileInfo file) 
{ 
    var ext = file.Extension.StartsWith(".") ? file.Extension.Substring(1) 
              : file.Extension; 

    return Enum.GetNames(typeof(FileExtensions)) 
       .Any(f => f.Equals(ext)); 
} 

और इसका इस्तेमाल चाहते:

bool hasExtension = file.HasExtension(); 
0

Enum.IsDefined एक स्ट्रिंग ले जाएगा जिसमें एनम वैल्यू का नाम होगा। केवल कुरूपता आप File.Extension के बंद अग्रणी अवधि पट्टी करने के लिए है कि है और यह केस संवेदी है:

Enum.IsDefined(typeof(FileExtension), file.Extension.Substring(1).ToLower()) 

संपादित करें: एक्सटेंशन विधि अच्छाई अपने वांछित वाक्य रचना के करीब पाने के लिए: निजी तौर पर

IEnumerable<string> GetNames(this Type t) { 
    if (!t.IsEnum) throw new ArgumentException(); 

    return Enum.GetNames(t); 
} 

typeof(FileExtensions).GetNames().Any(e=>e.ToString().Equals(file.Extension)); 

, हालांकि , मैं अभी भी IsDefined मार्ग के बजाय:

bool IsDefined(this Type t, string name) { 
    if (!t.IsEnum) throw new ArgumentException(); 

    return Enum.IsDefined(t, name); 
} 

typeof(FileExtension).IsDefined(file.Extension); 
0

सबसे अच्छा तरीका Enum.IsDefined फ़ंक्शन का उपयोग करना है। यह आपके मामले में बहुत आसान है:

if (Enum.IsDefined(typeof(FileExtentions), file.Extension)) 
+1

चेक @ मार्क ब्रैकेट जवाब –

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