C# 如何在ConstructorBuilder中定义局部变量?
我想为我在运行时构建的对象创建一个构造函数,该构造函数调用一个方法,该方法接受传递给ctor的所有参数的对象数组。看看如何构建这样一个方法,我似乎不得不做如下事情: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
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。。。