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是描述通用方法定义的MethodInfoMethodBuilder对象,则可以使用单个通用参数int发出对该方法的调用,如下所示:
il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));

关于c# - IL的泛型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9811456/

10-17 02:12