Невозможно вызвать метод с параметром в виде массива, используя refle.emit - PullRequest
0 голосов
/ 07 января 2020

В настоящее время я использую этот пост в качестве руководства Как создать многомерный массив с помощью Reflection.Emit , но с использованием одномерного массива.

Моя функция выглядит как

public void CallMethod3(object[] Items)
{

}

и мой код генерации отражения выглядит как

MethodInfo invokerMethod = typeof(Foo).GetMethod("CallMethod3");
il.Emit(OpCodes.Nop);
il.Emit(OpCodes.Ldarg_0);

// var local = new int[1];
LocalBuilder local = il.DeclareLocal(typeof(object[]));
il.Emit(OpCodes.Ldc_I4_1);
il.Emit(OpCodes.Newobj, typeof(object[]).GetConstructor(new[] { typeof(int) }));
il.Emit(OpCodes.Stloc, local);

// il.Emit(OpCodes.Ldloc, local);
// il.Emit(OpCodes.Ldc_I4_0);
// il.Emit(OpCodes.Ldc_I4, 123);
// var setMethod = typeof(object[]).GetMethod("Set");
// il.Emit(OpCodes.Call, setMethod);

il.Emit(OpCodes.Ldloc, local);

il.Emit(OpCodes.Call, invokerMethod);
il.Emit(OpCodes.Ret);

Все работает отлично, и я могу достичь точки останова в методе. Тем не менее, я начинаю сталкиваться с проблемой, когда пытаюсь заполнить массив объектов (код закомментирован здесь). Я начинаю получать недействительные вызовы.

Есть идеи, что я делаю неправильно?

...