if
语句被编译成 IL 时是什么样子的?
这是一个非常简单的 C# 结构。有人能给我一个更抽象的定义吗?
最佳答案
这里有一些 if
语句以及它们如何转换为 IL:
ldc.i4.s 0x2f var i = 47;
stloc.0
ldloc.0 if (i == 47)
ldc.i4.s 0x2f
bne.un.s L_0012
ldstr "forty-seven!" Console.WriteLine("forty-seven!");
call Console::WriteLine
L_0012:
ldloc.0 if (i > 0)
ldc.i4.0
ble.s L_0020
ldstr "greater than zero!" Console.WriteLine("greater than zero!");
call Console::WriteLine
L_0020:
ldloc.0 bool b = (i != 0);
ldc.i4.0
ceq
ldc.i4.0
ceq
stloc.1
ldloc.1 if (b)
brfalse.s L_0035
ldstr "boolean true!" Console.WriteLine("boolean true!");
call Console::WriteLine
L_0035:
ret
这里要注意一件事:IL 指令总是“相反”。 if (i > 0)
翻译成有效的意思是“如果 i <= 0
, 然后跳过 if
的正文 block ”。
关于c# - if 在 IL 中是什么样子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3663438/