2016-05-30 4 views
2

私は一般的なメソッドSampleMethod(param1、param2)を持っていますので、設定値に基づいてメソッドを呼び出す必要があります。たとえば、次のようになります。app.configからデータ型の値を読み取る

SampleMethod<long>(param1, param2); 
SampleMethod<Guid>(param1, param2); 

このメソッド呼び出しでは、設定値を変更する必要があります。私はapp.configファイルのような設定ファイルから値を取得する必要があります。

public static Type RangeType 
{ 
    get 
    { 
     Type rangeType; 
     string rangeDataTypeString = ConfigurationManager.AppSettings["ShardRangeType"]; 

     switch (rangeDataTypeString.ToUpper()) 
     { 
      case "LONG": 
       rangeType = typeof (long); 
       break; 

      case "GUID": 
       rangeType = typeof (Guid); 
       break; 

      default: 
       rangeType = typeof (long); 
       break; 
     } 

     return rangeType; 
    } 
} 

私はこのベースの設定値を呼び出し、同様に上記の方法には、この値を渡すしようとすると:誰かが提案する可能性があり、タイプとして認識されません

Type rangeType = Configuration.RangeType; 
SampleMethod<rangeType>(param1, param2); 

上記の文でrangeTypeこれを達成する方法。前もって感謝します!

+0

「それは機能していません。」あなたの質問に答えを与えるのにはあまり役に立ちません。正確にどのようなエラーが発生しているのか教えてください。 – Sachin

+0

少なくともパラメータをキャストする必要があります。これらが標準データ型の場合は、['Convert.ChangeType'](https://msdn.microsoft.com/en-us/library/system.convert.changetype%28v=vs.110%29.aspx) –

+0

を使用できます。私の悪い、私は意味、rangeTypeはステートメントで認識されませんでした:SampleMethod (param1、param2); – SteelBird82

答えて

1

「SampleMethod」方式の場合は、あなたがそれを起動したいという同じクラスに存在しますジェネリックメソッドの呼び出しに

this.GetType().GetGenericMethod("SampleMethod",rangeType).Invoke(null,param1, param2); 
1

型引数がコンパイルされています。あなたはそれらに変数を入れることはできません。メソッドにパラメータとしてTypeを渡したい場合は、そのメソッドにパラメータとして追加します。

非常に限られたタイプの引数があることがわかっている場合は、条件付き呼び出しのセットを作成できます(switchなど)。

そうでなければ、リフレクションを使用して適切な汎用メソッドを構築し、それを呼び出すことができます(Rezaの答えを参照)。

SampleMethodで行っていることを正確に把握していないと、それを行う方法の他の選択肢が示唆されていません。

関連する問題