无法填充本地
lengthVariable
就像那样-它在一个完全独立的作用域/堆栈框架中运行。但是,你可以改变你的方法(
DynamicMethod
或
MethodBuilder
)到
返回
然后创建新方法的委托
Func<int>
,并调用它。
那么你的最后一句台词是
IL.Emit(Opcodes.Ret);
,以返回本地堆栈上的单个值。或者,您可以将值存储到实例或静态字段中,使用
Opcodes.Stfld
或
Opcodes.Stsfld
.
在评论中讨论之后,似乎
我知道我可以在IL中编写for循环,但我有点避免编写IL的分支语句。
在这个问题上是可以克服的;
foreach
不是真的
所有这些都很棘手-你要找的最后一个IL是可以得到的
by decompiling existing code
,这使得
棘手的
为实际的分支目标处理标签-但这只意味着调用
.DefineLabel()
到
宣布他们
-在你知道它们会跳到哪里之前,你可以把它们当作目标
.MarkLabel()
到
给他们定位
(仅一次)。不是很好
直接的
IL(它使用一个抽象层),但是您可以看到正在使用这种方法
here
-尤其要注意,它使用
DefineLabel()
提前,稍后标记目的地
MarkLabel
.