我通过在运行时使用Reflection.Emit
. 实际上,我很惊讶到目前为止事情有多容易,但是我遇到了一些我无法猜测的事情,而且我在文档中找不到任何相关的东西。
我正在尝试创建一个简单地打印我定义的非常简单的类的函数。例如,如果我将代码更改为 print string
,它可以工作,但是当我传递我的 class 的实例时它总是无法运行A
。
奇怪的是我可以注释掉我的函数体,但它仍然以TargetInvocationException
. 它一定很简单,但我看不到发生了什么!
class A
{
public override string ToString()
{
return "AAA!";
}
}
class Program
{
static void Main(string[] args)
{
DynamicMethod func = new DynamicMethod("func", null, new Type[] { typeof(A) });
ILGenerator il = func.GetILGenerator();
//il.Emit(OpCodes.Ldarg_0);
//il.Emit(OpCodes.Box, typeof(A));
//il.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(A) }));
il.Emit(OpCodes.Ret);
func.Invoke(null, new object[] { new A() });
Console.Read();
}
}
我做错了什么使这个引发异常?为什么这只发生在我的课程中?