【问题标题】:How do I define local variables in a ConstructorBuilder?如何在 ConstructorBuilder 中定义局部变量?
【发布时间】:2010-12-15 22:21:53
【问题描述】:

我想为我在运行时构建的对象创建一个构造函数,该构造函数调用一个方法,该方法接受传递给 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 构建器上定义 object[] 类型的局部变量?似乎没有定义变量的方法,还是我只是发出 stloc.0/ldloc.0 而不关心先定义它?

【问题讨论】:

    标签: c# reflection.emit


    【解决方案1】:

    你不能打电话给GetILGenerator(),然后用ILGenerator.DeclareLocal来声明一个局部变量吗?

    诚然,我没有尝试过使用其中的任何一个,但它听起来就像是要走的路......

    【讨论】:

    • 哇,我怎么错过了!我认为 ref.emit 仍然是一个可怕的秘密 api...
    猜你喜欢
    • 2020-08-29
    • 2015-01-02
    • 1970-01-01
    • 2019-10-01
    • 2018-10-16
    • 1970-01-01
    • 2021-10-04
    • 2011-11-28
    • 1970-01-01
    相关资源
    最近更新 更多