1

リフレクションによってジェネリック パラメーターのジェネリック型を取得する必要があります。しかし、型 { Name="T" ; ではなく、実際の型です。FullName=null }

public void Sample<T>(T i, object o)
{
    MethodBase basee = MethodBase.GetCurrentMethod();
    Type[] types = basee.GetGenericArguments();
}

しかし、リフレクションを使用しているため、typeof(T) は使用できません。

(リフレクションを使用して) ジェネリック引数の型を取得する方法はありますか。

// in this case i should get (Type) { Name="Int32" ; FullName="System.Int32" }
myClassObj.Sample(10, new object());

他のテーマでは、typeof(T) ex によって呼び出されるメソッドを呼び出す方法を知りたい:

// in Il code I see that the compiler use:
// ldtoken !!T => this should get the RuntimeTypeHandle needed as parameter
// System.Type::GetTypeFromHandle(valuetype System.RuntimeTypeHandle)
Type t = Type.GetTypeFromHandle( ? ? ? ); 

T ジェネリック引数から RuntimTypeHandle を取得するにはどうすればよいですか

4

1 に答える 1

4

このすべてのポイントはわかりませんが、どうですか

public void Sample<T>(T i, object o)
{
  Type t = typeof(T);
  if (i != null)
  {
    t = i.GetType();
  }

  // Do whatever with t
  Console.WriteLine(t);
}

次に、実行時の型 (オブジェクトがある場合) を取得します。それ以外の場合は、静的な型を取得します。

于 2012-09-08T04:06:16.953 に答える