C# - 使用动态方法中的'params string []'调用委托

问题描述 投票:1回答:1

是否有可能从动态方法中调用delegate作为参数params string[]

例:

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.

我在这里做错了吗?

c# .net .net-core ilgenerator
1个回答
0
投票

您必须传递字符串数组。 “params”关键字仅用于c#/ vb中的语法糖,但在IL中被忽略。

© www.soinside.com 2019 - 2024. All rights reserved.