是否可以将泛型与 IL 生成器一起使用?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
是否可以将泛型与 IL 生成器一起使用?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
是的,这是可能的,但不是在DynamicMethod
课堂上。如果你被限制使用这个类,你就不走运了。如果您可以改为使用MethodBuilder
对象,请继续阅读。
对于大多数意图和目的而言,发出泛型方法的主体与发出其他方法的主体没有什么不同,只是您可以创建泛型类型的局部变量。下面是一个使用MethodBuilder
泛型参数 T 创建泛型方法并创建 T 类型的局部变量的示例:
MethodBuilder method;
//... Leaving out code to create MethodBuilder and store in method
var genericParameters = method.DefineGenericParameters(new[] { "T" });
var il = method.GetILGenerator();
LocalBuilder genericLocal = il.DeclareLocal(genericParameters[0]);
要从另一个方法发出对该泛型方法的调用,请使用此代码。假设method
是一个描述泛型方法定义MethodInfo
的MethodBuilder
对象,您可以使用单个泛型参数发出对该方法的调用,int
如下所示:
il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));