c# - if 在 IL 中是什么样子的?

标签 c# if-statement definition intermediate-language

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/

相关文章:

java - 生成 1 到 100 之间的 1 到 300 个数字并将每个数字放入字符串中时遇到问题

c++ - 主体为空的类是不完整类型吗?

c# - 如何将 4 位二进制数转换为 8 位二进制数?

c# - 如果文件不存在,则删除数据库中的值

java - if/else 语句,else 每次都会打印

oop - 面向对象编程中 "interface"的定义是什么

c++ - 纯虚函数实现

c# - 在 wpf 应用程序的新 Itemtab 中运行 exe 文件

c# - 用字符串中的字符填充字符数组

javascript - Java Script/jQuery – 简单的 if 语句不适用于预定义变量