C# 如何在ConstructorBuilder中定义局部变量?

C# 如何在ConstructorBuilder中定义局部变量?,c#,reflection.emit,C#,Reflection.emit,我想为我在运行时构建的对象创建一个构造函数,该构造函数调用一个方法,该方法接受传递给ctor的所有参数的对象数组。看看如何构建这样一个方法,我似乎不得不做如下事情: method pulbic hidebysig specialname rtspecialname instance void .ctor(SomeObject arg) cil managed { ldarg.0 call void MyNameSpace.BaseClass::.ctor(); ldc.i4.1

我想为我在运行时构建的对象创建一个构造函数,该构造函数调用一个方法,该方法接受传递给ctor的所有参数的对象数组。看看如何构建这样一个方法,我似乎不得不做如下事情:

method pulbic hidebysig specialname rtspecialname instance void .ctor(SomeObject arg) cil managed
{
  ldarg.0
  call void MyNameSpace.BaseClass::.ctor();
  ldc.i4.1
  newarr System.Object
  stloc.0
  ldloc.0
  ldc.i4.0
  ldarg.1
  stelem.ref
  ldloc.0
  call void SomeClass.Method(object[])
  ret
}

非常简单,但是如何在ctor builder上定义类型为
object[]
的局部变量?似乎没有定义变量的方法,或者我只是发出一个
stloc.0/ldloc.0
,而不关心先定义它吗?

你不能调用
GetILGenerator()
,然后使用
ILGenerator.DeclareLocal
来声明局部变量吗


诚然,我还没有尝试过使用这些功能,但听起来这是一个不错的选择……

哇,我怎么会错过这些!我认为ref.emit仍然是一个可怕的秘密api。。。