创建对象后如何调用方法?现在我这样做:
DynamicMethod method = new DynamicMethod("test_method", typeof(List<string>), new Type[0]);
var generator = method.GetILGenerator();
var type = typeof(List<string>);
generator.Emit(OpCodes.Newobj, type);
generator.Emit(OpCodes.Stloc_0);
generator.Emit(OpCodes.Ldloc_0);
generator.Emit(OpCodes.Ldstr, "test");
generator.Emit(OpCodes.Callvirt, type.GetMethod("Add"));
generator.Emit(OpCodes.Ldloc_0);
generator.Emit(OpCodes.Ret);
var result = (List<string>)method.Invoke(null, null);
但我得到一个例外
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.BadImageFormatException: Bad method token.
可能是什么问题呢?
因为,
OpCodes.Newobj您需要传递要调用的构造函数,而不是要创建的类型。