C#代码:
public int LoopTest()
{
int s=0;
int[] array={2,3,4,5,6,7,8,9};
for(int k=0;k<=7;k++)
{
s+=array[k];
}
foreach(int a in array)
{
s+=a;
}
return s;
}
IL代码:
.method public hidebysig instance int32 LoopTest() cil managed
{
// 代码大小 78 (0x4e)
.maxstack 3
.locals init ([0] int32 s,
[1] int32[] 'array',
[2] int32 k,
[3] int32 a,
[4] int32 CS$00000003$00000000,
[5] int32[] CS$00000007$00000001,
[6] int32 CS$00000008$00000002)
IL_0000: ldc.i4.0
IL_0001: stloc.0
IL_0002: ldc.i4.8
IL_0003: newarr [mscorlib]System.Int32
IL_0008: dup
IL_0009: ldtoken field valuetype '<PrivateImplementationDetails>'/'$$struct0x6000002-1' '<PrivateImplementationDetails>'::'$$method0x6000002-1'
IL_000e: call void [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::InitializeArray(class [mscorlib]System.Array,
valuetype [mscorlib]System.RuntimeFieldHandle)
IL_0013: stloc.1
IL_0014: ldc.i4.0
IL_0015: stloc.2
IL_0016: br.s IL_0022 //for 开始的地方
IL_0018: ldloc.0
IL_0019: ldloc.1
IL_001a: ldloc.2
IL_001b: ldelem.i4
IL_001c: add
IL_001d: stloc.0
IL_001e: ldloc.2
IL_001f: ldc.i4.1
IL_0020: add
IL_0021: stloc.2
IL_0022: ldloc.2
IL_0023: ldc.i4.7
IL_0024: ble.s IL_0018 //for 结束的地方
IL_0026: ldloc.1 //foreach 从这里开始
IL_0027: stloc.s CS$00000007$00000001
IL_0029: ldc.i4.0
IL_002a: stloc.s CS$00000008$00000002
IL_002c: br.s IL_003e
IL_002e: ldloc.s CS$00000007$00000001
IL_0030: ldloc.s CS$00000008$00000002
IL_0032: ldelem.i4
IL_0033: stloc.3
IL_0034: ldloc.0
IL_0035: ldloc.3
IL_0036: add
IL_0037: stloc.0
IL_0038: ldloc.s CS$00000008$00000002
IL_003a: ldc.i4.1
IL_003b: add
IL_003c: stloc.s CS$00000008$00000002
IL_003e: ldloc.s CS$00000008$00000002
IL_0040: ldloc.s CS$00000007$00000001
IL_0042: ldlen
IL_0043: conv.i4
IL_0044: blt.s IL_002e //foreach结束的地方
IL_0046: ldloc.0
IL_0047: stloc.s CS$00000003$00000000 //此乃自动生成的一个变量,保存返回值,void时没有
IL_0049: br.s IL_004b
IL_004b: ldloc.s CS$00000003$00000000
IL_004d: ret
} // end of method Class1::LoopTest