Я пытаюсь выдать то, что, как я думал, будет простым массивом объектов, результатом которого будет код, подобный приведенному ниже примеру
object[] parameters = new object[] { a, b, };
Когда я пишу приведенный выше код на C # с использованием VS, я получаю следующий IL. Как и ожидалось, это работает.
.locals init (
[0] object[] parameters,
[1] object[] CS$0$0000)
Однако, когда я пытаюсь запустить Emit IL напрямую, я получаю только один индексный массив инициализации. Может кто-нибудь помочь мне сказать, где я ошибся?
Вот код Emit, который я использую:
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 отличается.