16

私は列挙型を持っています

public enum FileExtentions {
    mp3,
    mpeg
}

そして、拡張子が前の列挙型にあるかどうかを確認したい FileInfo があります。私はできることを望んでいた

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

しかし、それはあまりにも素晴らしかったでしょう。何か案は?

4

7 に答える 7

32

その理由とはAnyEquals?見落としていませContainsんか?

bool result = Enum.GetNames(typeof(FileExtensions)).Contains("mp3");
于 2008-11-30T00:53:54.297 に答える
10

送信を押している間、私は自分で答えを考えました:

Enum.GetNames(typeof(FileExtensions)).Any(f=>f.Equals("."+file.Extension))
于 2008-11-29T21:23:37.250 に答える
2

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);
于 2008-11-30T01:22:41.603 に答える
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();
于 2008-11-29T23:43:49.587 に答える
0

System.Enumタイプを使用してこれを行うことができます。

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

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

アップデート:

ああ、私はあなたが拡張機能の列挙型全体をチェックしたいのであって、特定の列挙型の値が拡張機能と一致するのではないと誤解しました。その場合、GetNames()を使用したアプローチがルートです。申し訳ありませんが、自分の回答を自分の質問に受け入れられたものとしてマークすることはできません。;-)

于 2008-11-29T21:25:47.010 に答える
0

最善の方法は、Enum.IsDefined 関数を使用することです。あなたの場合、それはかなり簡単です:

if (Enum.IsDefined(typeof(FileExtentions), file.Extension))
于 2012-11-23T08:38:46.743 に答える