C# - 从动态方法中使用 'params string[]' 调用委托
C# - Calling a Delegate with 'params string[]' from a Dynamic Method
是否可以从动态方法中调用作为参数 params string[]
的 delegate
?
示例:
delegate string Del(params string[] arg);
...
Del f = args => "Called successfully.";
...
var mb = typeBuilder.DefineMethod(
"MyMethod",
MethodAttributes.Public | MethodAttributes.Virtual,
typeof(string),
new Type[] {typeof(string), typeof(string)});
...
var generator = mb.GetILGenerator();
...
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldarg_1);
generator.Emit(OpCodes.Ldarg_2);
...
generator.Emit(OpCodes.Call, f.GetType().GetMethod("Invoke"));
因为每当我 运行 上面的代码时,它都会给我这个:
Unhandled Exception: System.InvalidProgramException: JIT Compiler encountered an internal limitation.
我是不是做错了什么?
您必须传递字符串数组。 "params" 关键字仅用于 c#/vb 中的语法糖,但在 IL 中被忽略。
是否可以从动态方法中调用作为参数 params string[]
的 delegate
?
示例:
delegate string Del(params string[] arg);
...
Del f = args => "Called successfully.";
...
var mb = typeBuilder.DefineMethod(
"MyMethod",
MethodAttributes.Public | MethodAttributes.Virtual,
typeof(string),
new Type[] {typeof(string), typeof(string)});
...
var generator = mb.GetILGenerator();
...
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldarg_1);
generator.Emit(OpCodes.Ldarg_2);
...
generator.Emit(OpCodes.Call, f.GetType().GetMethod("Invoke"));
因为每当我 运行 上面的代码时,它都会给我这个:
Unhandled Exception: System.InvalidProgramException: JIT Compiler encountered an internal limitation.
我是不是做错了什么?
您必须传递字符串数组。 "params" 关键字仅用于 c#/vb 中的语法糖,但在 IL 中被忽略。