C # - вызов делегата с помощью 'params string []' из динамического метода - PullRequest
0 голосов
/ 09 сентября 2018

Можно ли вызвать 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.

Я что-то здесь не так делаю?

1 Ответ

0 голосов
/ 09 сентября 2018

Вы должны передать массив строк. Ключевое слово «params» только для синтаксического сахара в c # / vb, но игнорируется в IL.

...