2017-03-29 15 views
0

関数を呼び出すときに使用される型を取得することは可能ですか?関数のデータ型を使用する、または関数のデータ型を渡す#

サンプル

public T GetRegData<T>(string v) 
    { 
     RegistryKey key = registryPointer(); 

     object oValue = key.GetValue(v, null); 


     if (oValue != null) 
     { 
      string sValue = oValue.ToString().ToLower(); 
     } 

     if (oValue is T) 
     { 
      return (T)oValue; 
     } 
     else 
     { 
      try 
      { 
       return (T)Convert.ChangeType(oValue, typeof(T)); 
      } 
      catch (InvalidCastException) 
      { 
       return default(T); 
      } 
     } 
    } 

私は私の関数を呼び出す場合のように見える:今、私は返すようにしようとどのようなタイプの私の関数の内部を知りたい

string x = GetRegData<string>("test1"); 
bool y = GetRegData<bool>("test2"); 

。返品データの種類ではありません。

理由:

key.GetValue(v, null); 

がパラメータとしてNULLを持っています。しかし、これは場合によってはエントリーの作成を拒否します。例えば。私はレジストリに文字列を追加しようとすると、単にスキップします。私は文字列を使用する場合のみそれを追加します!私がやろうとしているより多くのものを示してもよいコードをここだから、一部

key.GetValue(v, XXXXXX); 

種類のダイナミックでなければなりません^^

一部Tesing ...

public T GetRegData<T>(string v) 
{ 
    RegistryKey key = registryPointer(); 

    object oValue; 

    if (default(T) is string) 
    { 
     oValue = key.GetValue(v, ""); 
    } 
    else if (default(T) is int) 
    { 
     oValue = key.GetValue(v, 0); 
    } 
    else if (default(T) is bool) 
    { 
     oValue = key.GetValue(v, false); 
    } 
    else 
    { 
     oValue = key.GetValue(v, null); 
    } 
    .... 

しかし、とにかくDefaut(T)はnullのようです。

PS:他の質問とその回答が問題を解決しないときは、投票を終了してください。

+0

の可能性のある重複した[実行時にジェネリック型を取得する方法?](http://stackoverflow.com/questions/3941384/how-to-get-the-generic-type-at-runtime) –

+0

いいえ、これは近くでさえありません:)しかし、このリンクに感謝します。またはおそらく私は本当にそれを取得しないでください... – Dwza

+0

現在、あなたのコードサンプルは完全ではありません。 [MCVE]の作成方法をご覧ください。 –

答えて

0

typeof演算子を使用できます。

public T GetRegData<T>(string v) 
{ 
    RegistryKey key = registryPointer(); 

    object oValue; 

    if (typeof(T) == typeof(string)) 
    { 
     oValue = key.GetValue(v, ""); 
    } 
    else if (typeof(T) == typeof(int)) 
    { 
     oValue = key.GetValue(v, 0); 
    } 
    else if (typeof(T) == typeof(bool)) 
    { 
     oValue = key.GetValue(v, false); 
    } 
    else 
    { 
     oValue = key.GetValue(v, null); 
    } 
    ... 
} 
関連する問題