Как получить тип универсального параметра по отражению

Мне нужно получить общий тип универсального параметра путем отражения. Но реальный тип, а не тип { 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( ? ? ? ); 

Как я могу получить RuntimTypeHandle из универсальных аргументов T

1 ответ

Я не знаю смысла всего этого, но как насчет

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);
}

Тогда у вас есть тип времени выполнения (если есть объект), в противном случае у вас есть статический тип.

Другие вопросы по тегам