2008-11-29 4 views

Antwort

21

Was hinter Any ist der Grund ... Equals? Haben Sie übersehen Contains?

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

Sie haben Recht: P –

+0

Dies erfordert 'using System.Linq', korrigieren? –

8

Während des Drückens einreichen Ich dachte an die Antwort selbst:

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

Aber Sie können Ihren eigenen Eintrag nicht als Antwort markieren. Aber das ist logisch, denke ich. –

+0

file.Extension hat die führende Periode - nicht die enum-Namen. Sollte das nicht sein (f => ("." + F) .Equals (file.Extension))? –

+0

Sie Beitrag hat mir geholfen, eine Antwort für mein Problem auch zu finden: public enum Etwas {John, Rob, Tim} var msg = "Ich mag Tim, er ist gut"; var isOk = Enum.GetNames (typeof (Etwas)) Any (x => msg.Contains (x.ToString())); –

0

Sie können das tun mit dem System.Enum Typ:

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

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

Update:

Ah, ich missverstanden, dass Sie die gesamte Enum für die Erweiterung überprüfen möchten und nicht, dass ein bestimmter Enum-Wert mit der Erweiterung übereinstimmt. In diesem Fall ist Ihr Ansatz mit GetNames() die Route - Entschuldigung, dass Sie Ihre eigene Antwort nicht als für Ihre eigene Frage akzeptiert markieren können. ;-)

+0

Das würde prüfen, ob meine Datei genau diese Erweiterung hat.Wenn ich das überprüfen wollte, könnte ich auch tun, wenn (file.Extension.equals (FileExtensions.Mp3.ToString()) [ungetestet] –

1

Sie können die Fileinfo-Typ mit der folgenden Erweiterungsmethode erweitern:

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)); 
} 

und verwenden Sie es mögen:

bool hasExtension = file.HasExtension(); 
0

Enum.IsDefined wird eine Zeichenfolge mit dem Namen eines Enum-Werts genommen. Die einzige Hässlichkeit ist, dass Sie die führende Zeit weg von File.Extension abzustreifen haben und es ist Groß- und Kleinschreibung:

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

Edit: Erweiterung Methode Güte der Nähe der gewünschten Syntax zu erhalten:

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)); 

persönlich aber, , Würde ich immer noch lieber die IsDefined-Route:

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

    return Enum.IsDefined(t, name); 
} 

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

Der beste Weg ist, Enum.IsDefined-Funktion zu verwenden. Es ist ziemlich einfach, in Ihrem Fall:

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

Check @Mark Brackett antworte –

Verwandte Themen