gpt4 book ai didi

c# - 如何在 IL 代码中发出三元运算符

转载 作者:行者123 更新时间:2023-12-02 04:58:46 24 4
gpt4 key购买 nike

我正在尝试生成动态方法。假设我在堆栈中有 bool 值 arg。我想调用一个方法,该方法接受 int 类型的参数,该参数将通过简单规则 arg 从 bool 值转换而来? 1 : 0。对于一些示例代码,生成的 IL 代码如下:

//bool value is already pushed into stack
IL_003d: brtrue.s IL_0042
IL_003f: ldc.i4.0
IL_0040: br.s IL_0043
IL_0042: ldc.i4.1
IL_0043: callvirt --methodName--

当发出 OpCodes.Brtrue_SOpCodes.Br_S 时,我如何才能正确识别要跳转到的偏移量?

最佳答案

如果你真的只想将true转换为1,将false转换为0,你可以使用事实上,小于 4 字节的类型在堆栈上被扩展为 4 字节。这意味着您无需执行任何操作,只需将 bool 视为 int

如果你真的想要一个三元运算符,你可以使用一对方法 DefineLabel()MarkLabel():

var trueLabel = il.DefineLabel();
var endLabel = il.DefineLabel();

il.Emit(OpCodes.Brtrue, trueLabel);

il.Emit(OpCodes.Ldc_I4_0);

il.Emit(OpCodes.Br, endLabel);

il.MarkLabel(trueLabel);

il.Emit(OpCodes.Ldc_I4_1);

il.MarkLabel(endLabel);

关于c# - 如何在 IL 代码中发出三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17450096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com