重现代码:
var dmFoo = new DynamicMethod("Foo", typeof(void), Type.EmptyTypes); var ilFoo = dmFoo.GetILGenerator(); //... var label = ilFoo.DefineLabel(); //... var dmBar = new DynamicMethod("Bar", typeof(void), Type.EmptyTypes); var ilBar = dmBar.GetILGenerator(); //... ilBar.MarkLabel(label);
报错信息为:
...NullReferenceException...
at System.Reflection.Emit.ILGenerator.MarkLabel(Label loc)
at ...(your code)
很明显代码中把ilFoo的Label试图放到ilBar里去,这时显然应该抛出一个ArgumentException,而Framework却傻乎乎的抛出了个NullReferenceException,害得我白到网上找了两个小时,却没发现什么类似的报错,最后才发现其实是一个参数弄错了