在已编译的C#程序上使用ILDASM.exe时,它会显示方法中的每条指令都有一个标签.
例如:
IL_0001: ldc.i4.4
IL_0002: stloc.0
IL_0003: ldc.r8 12.34
IL_000c: stloc.1
IL_000d: ldc.r8 3.1415926535897931
IL_0016: stloc.2
IL_0017: ldstr "Ehsan"
IL_001c: stloc.3
IL_001d: ret
为什么是这样?这样做效率不高或者CIL编译器本身是否优化这些标签?
解决方法:
编译的CIL中不存在标签.它们是为了方便您在反汇编代码中显示的.
这些特定标签对应于指令偏移,而手工代码没有这样的限制(标签可以是任意字符串).