Я пытаюсь Выделяют то, что я думал, что будет простой массив объектов, что приведет к коду аналогично приведенному ниже примеруTrouble испуская массив объектов с использованием Reflection.Emit
object[] parameters = new object[] { a, b, };
Когда я пишу код выше в C# используя VS, я получаю следующий IL. Как и ожидалось, это работает.
.locals init (
[0] object[] parameters,
[1] object[] CS$0$0000)
Однако, когда я пытаюсь использовать Emit IL напрямую, я получаю только один массив init. Может кто-нибудь помочь мне сказать, где я здесь ошибся?
Вот код Испустите Я использую:
int arraySize = 2;
LocalBuilder paramValues = ilGenerator.DeclareLocal(typeof(object[]));
paramValues.SetLocalSymInfo("parameters");
ilGenerator.Emit(OpCodes.Ldc_I4_S, arraySize);
ilGenerator.Emit(OpCodes.Newarr, typeof(object));
ilGenerator.Emit(OpCodes.Stloc, paramValues);
Вот полученный IL:
.locals init (
[0] object[] objArray)
Остальная часть полученного IL идентична между двумя решениями, но для некоторых причина .locals init - другой.
Это имеет большой смысл и дает мне представление о том, как реорганизовать мои подпрограммы. Спасибо за совет. – JoeGeeky