2009-07-10 13 views
0

ジェネリックメソッド内で返される値のタイプを決定する方法:今我々はそうのような一般的なメソッドを作成しました

 
public TReturnType GetValue(string key) 
{ 
    var configurationParameter = (from cp in _repository.ConfigurationParameters 
     where cp.ConfigurationParameterKey == key 
     select cp).FirstOrDefault(); 

    var returnValue (TReturnType)Convert.ChangeType(configurationParameter.ConfigurationParameterValue, typeof (TReturnType)); 
    return returnValue; 
} 

、我々はそのように、この方法で処理し、いくつかのエラーを入れたい場合、たとえば、int.TryParse(returnValue、out myNewInt)のような数値型が必要です。もちろんこれを行うには、メソッド内のTReturnTypeの型を判別できる必要があります。

これを行う方法はありますか?

ご協力いただきありがとうございます。よろしくです。 よろしくお願いします。

if(typeof(TReturnType) == typeof(int)) 
{ 
    var number = (int)returnValue; 
    //Validate your output 
} 

答えて

2

確かに、ちょうどこのようないくつかのコードに追加します。あなたはいつも言うことができる

if (typeof(T) == typeof(int)) whatever 

しかし、これは悪いコードのにおいのビットです。ジェネリックの全体のポイントはになりますです。 特殊目的の場合 Tが整数の場合のコードは、単純にを別の方法を追加します。は正確に整数の場合を処理しますか?

+0

Oh my God !!!これはとてもシンプルで絶対に恥ずかしいです。私は間違いなく今家に帰る必要がある。 ありがとうございます。 –

3

は確かに、しかし、あなたは、これは良いアイデアであるかどうかを検討する必要があります。

+0

私はこれを、3種類のids(文字列、int、およびguid)をサポートするジェネリックコレクションで行いました。それ以外は、実装されていない例外がスローされます。 –

+0

3つの方法がある方が良いでしょう。あなたのジェネリック薬をジェネリック*にしましょう。そのためジェネリック薬と呼ばれています。 –

+0

あなたは正しいです、私はおそらく怠け者でした。 –

関連する問題