17 Stimmen

Prüfen, ob ein Enum ein Feld hat, das einer Zeichenkette entspricht

Ich habe eine Aufzählung

public enum FileExtentions {
    mp3,
    mpeg
}

Und ich habe eine FileInfo, von denen ich überprüfen möchte, ob die Erweiterung in der vorherigen enum ist. Ich hatte gehofft, ich könnte eine

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

Aber das wäre zu fantastisch gewesen. Irgendwelche Ideen?

33voto

Konrad Rudolph Punkte 503837

Was ist der Grund für die Any Equals ? Haben Sie übersehen Contains ?

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

10voto

Boris Callens Punkte 86390

Während ich auf Absenden drückte, dachte ich selbst an die Antwort:

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

0 Stimmen

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

0 Stimmen

File.Extension hat den führenden Punkt - nicht die Enum-Namen. Müsste es nicht (f => ("." + f).Equals(file.Extension)) heißen?

0 Stimmen

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

2voto

Mark Brackett Punkte 83046

Enum.IsDefined nimmt eine Zeichenkette, die den Namen eines Enum-Wertes enthält. Die einzige Unschönheit ist, dass Sie den führenden Punkt von Datei.Erweiterung und es wird zwischen Groß- und Kleinschreibung unterschieden:

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

Bearbeiten: Erweiterung Methode Güte, um nahe an Ihre gewünschte Syntax zu bekommen:

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

Ich persönlich würde jedoch immer noch die IsDefined-Methode vorziehen:

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

   return Enum.IsDefined(t, name);
}

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

1voto

huseyint Punkte 14760

Sie können den Typ FileInfo 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 wie:

bool hasExtension = file.HasExtension();

0voto

Jeff Donnici Punkte 2698

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

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

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

Aktualisierung:

Ah, ich habe missverstanden, dass Sie das gesamte Enum auf die Erweiterung prüfen wollen und nicht, dass ein bestimmter Enum-Wert mit der Erweiterung übereinstimmt. In diesem Fall ist Ihr Ansatz mit GetNames() ist der Weg - leider können Sie Ihre eigene Antwort nicht als akzeptiert markieren ;-)

0 Stimmen

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X