IL的generics?

是否可以在IL Generator中使用generics?

DynamicMethod method = new DynamicMethod( "GetStuff", typeof(int), new Type[] { typeof(object) }); ILGenerator il = method.GetILGenerator(); ... etc 

是的,这是可能的,但不是DynamicMethod类。 如果你只能使用这门课,那你就不走运了。 如果您可以改为使用MethodBuilder对象,请继续阅读。

对于大多数意图和目的,发布generics方法的主体与发出其他方法的主体没有什么不同,除了您可以创建generics类型的局部变量。 下面是使用MethodBuilder创建generics方法的示例,其中包含generics参数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]); 

要从另一个方法发出对该generics方法的调用,请使用此代码。 假设method是一个描述generics方法定义的MethodInfoMethodBuilder对象,您可以使用单个generics参数int发出对该方法的调用,如下所示:

 il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));