我正在尝试发出我认为是一个简单的对象数组的内容,该数组会产生类似于以下示例的代码
object[] parameters = new object[] { a, b, };
当我使用 VS 在 C# 中编写上述代码时,我得到以下 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是不同的。