【发布时间】:2018-11-21 07:46:02
【问题描述】:
上课
class C
{
public T Get<T>()
{
return default;
}
public void M()
{
int i = this.Get<Int32>();
}
}
我想在运行时使用Reflection.Emit 和ILGenerator 生成M 的主体,使其与上面显示的内容完全相同。
我尝试的是
ilGenerator.Emit(OpCodes.Ldarg_0);
ilGenerator.Emit(OpCodes.Call, typeof(C).GetMethod(nameof(C.Get), BindingFlags.Instance));
产生
ldarg.0
call instance !!0 C::Get<M0>(string)
// ^^
ret
但我需要得到
ldarg.0
call instance !!0 C::Get<int32>(string)
// ^^^^^
ret
(注意C.Get<T>调用中的不同类型参数)
发出对泛型 cfunction 的调用时,如何传递泛型参数的类型(即去掉 M0 并改为使用 int32)? p>
【问题讨论】:
标签: c# generics cil reflection.emit