В настоящее время я использую этот пост в качестве руководства Как создать многомерный массив с помощью 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);
Все работает отлично, и я могу достичь точки останова в методе. Тем не менее, я начинаю сталкиваться с проблемой, когда пытаюсь заполнить массив объектов (код закомментирован здесь). Я начинаю получать недействительные вызовы.
Есть идеи, что я делаю неправильно?