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