2009-08-10 6 views
1

文字列パラメータを解析して列挙型に変換するメソッドを作成しようとしています。 enumの型は、パラメータによっても決まります。これは私が始めたものです:.NETの 'Type'と 'Enum'をパラメータとして使用

public static type GetValueOrEmpty(string text, Type type) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return (type)Enum.Parse(typeof(type)value); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

明らかに、これはいくつかの理由で機能しません。これができる方法はありますか?

+1

public static TEnum ParseEnum<TEnum>(string s) { return (TEnum)Enum.Parse(typeof(TEnum), s); } 

EDIT:このような何かはトリックを行う必要があります/ 1305566 –

答えて

14

あなたはコンパイル時にタイプがわかっている場合は、代わりにそれは一般的なことができます:

public static T GetValueOrEmpty<T>(string text) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return (T) Enum.Parse(typeof(T), text); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

あなたは、メソッドがそのタイプのウォンを返した、コンパイル時にタイプがわからない場合は」あなたには大いに役立ちます。あなたはそれが当然のobjectを返すことができます:

public static object GetValueOrEmpty(string text, Type type) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return Enum.Parse(type, text); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

これらのいずれもが、あなたにとって有用であれば、あなたが達成しようとしているかについてのより多くの情報を記入してください。

+1

私はあなたの答えをもう一度upvoteすべきですか?あなたはおそらくあなたの86k評判で+10に気付かないでしょう。 ;) –

+0

@SarahVessels:あなたのコメントは今日とても面白いです。 –

3

一般的な方法を使用する必要があります。 https://gist.github.com/DoggettCKをチェックアウトnullabe列挙型と追加機能が含まれています解決するために、コード内の固定タイプミス...

+1

私は 'TEnum:struct'型制約をこれらのメソッドに追加して、呼び出すことができる型を制限しようとしています(C#では 'enum'制約は許されません。 'struct'は次善ですもの...) – thecoop

関連する問題