gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:57:47 24 4
gpt4 key购买 nike

我正在尝试生成动态方法。假设我有 bool 值 arg在堆栈中。我想调用一个接受 int 类型参数的方法将从 bool 转换而来通过简单规则得出的值arg ? 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