我试图构造一个泛型类型的实例,并在该实例上调用一个方法。然后返回该方法的结果。

var genericType = typeof(GenericType<>).MakeGenericType(typeof(TOutput));
il.DeclareLocal(genericType);
var instanceMethod = genericType.GetMethod("MethodName", new Type[0]);
il.Emit(OpCodes.Call, instanceMethod);
il.Emit(OpCodes.Ret);


我不断收到“ System.InvalidProgramExecution”异常。

GenericType类看起来像这样

public class GenericType<T>
{
    public T MethodName()
    {
        ...
    }
}

最佳答案

试试这个代码:

var il = mbuilder.GetILGenerator();
var genericType = typeof(GenericType<>).MakeGenericType(typeof(TOutput));
il.Emit(OpCodes.Newobj, genericType.GetConstructor(Type.EmptyTypes));
il.EmitCall(OpCodes.Callvirt, genericType.GetMethod("MethodName", Type.EmptyTypes), null);
il.Emit(OpCodes.Ret);

关于c# - ILGenerator实例化对象并调用实例方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45334009/

10-10 22:31