2010-12-16 9 views
2

enum objをすばやく検索し、enum obj includeを見つけたり、別の入力メンバーを含めたりすることはできますか?C#でEnumメンバーを検索する際の質問

public enum myen 
{ 
    S1, 
    S2, 
    S3, 
} 

other member like s2 or s4. 

intput s2 -> true; // included 
input s4 -> false; // not include 
+0

あなたは正確に何を達成しようとしていますか?これは非常に擬似コードであり、あまり明確ではありません。入力メンバーはどういう意味ですか? – Josh

+0

@ジョシュ、私は*私の元の投稿のキーワードとして定義されているかどうか*を使用する必要があります。ありがとうございました。 –

答えて

2

Enum.IsDefinedまたは入力内容に基づいてEnum.GetNamesを使用してください。

// => true 
Console.WriteLine(Enum.GetNames(typeof(myen)).Any(member => member.Equals("S3"))); 
Console.WriteLine(Enum.IsDefined(typeof(myen), "S3")); 
Console.WriteLine(Enum.IsDefined(typeof(myen), 2)); 

// => false 
Console.WriteLine(Enum.GetNames(typeof(myen)).Any(member => member.Equals("S4"))); 
Console.WriteLine(Enum.IsDefined(typeof(myen), "S4")); 
Console.WriteLine(Enum.IsDefined(typeof(myen), 3)); 
+0

'IsDefined'メソッドが見つかりません。それはどこにありますか?ありがとうございました。 –

+0

@Nano - これはEnumクラスの静的メソッドです。 Systemネームスペースに到達できるように、ソースファイルで 'System'を使用していることを確認してください。 – Gishu

+0

これは効率の問題であると仮定すると、それは「高速」ではありません。 – Mehrdad

2

私は、ジェネリックに基づいていますEnum.IsDefined()の独自のバージョンを書いて、代わりにボクシングのキャッシュ結果と値をアンボクシングをお勧めします。あなたの質問にあなたが言った "急速な"ルックアップにつながる可能性があります。

+0

+1それはリフレクションを使用しています - それをperf sensitive/freqと呼ばれる領域に埋め込む前に他のオプションを考慮してください。 – Gishu

+0

これは、リフレクションを使用していますが、オブジェクトが内部的にキャッシュされているので、同じ種類のチェック(同じ列挙型)を頻繁に行っているのであれば、キャッシュがなくなり(異なる列挙型が次々とチェックされるため)、リフレクションが実際に発生しなければならない場合には、それは重要になります。 – Mehrdad

関連する問題