> int i = 1; > > i += (i += 2) + 3; > > Console.WriteLine("{0}", i); > Console.ReadLine(); >>
> .locals init ([0] int32 i) > IL_0000: nop > IL_0001: ldc.i4.1 > IL_0002: stloc.0 > IL_0003: ldloc.0 // load i for the first += > IL_0004: ldloc.0 // load i for the second += > IL_0005: ldc.i4.2 > IL_0006: add > IL_0007: dup > IL_0008: stloc.0 // this is (i += 2) that is stored in i > IL_0009: ldc.i4.3 > IL_000a: add > IL_000b: add // this is the original value of i, loaded in IL_0003 > IL_000c: stloc.0 // i is overwritten >>
> int i = 1; > > i += 2; > i += i + 3; >>
>IL_0000: nop > IL_0001: ldc.i4.1 > IL_0002: stloc.0 > IL_0003: ldloc.0 > IL_0004: ldc.i4.2 > IL_0005: add > IL_0006: stloc.0 > IL_0007: ldloc.0 > IL_0008: ldloc.0 > IL_0009: ldc.i4.3 > IL_000a: add > IL_000b: add > IL_000c: stloc.0 >Exactly the results I would expect,
int i = 1; i += (i += 2) + 3;is same as writing:
int i = 1; i = i + (i = i + 2) + 3; // i = 1 + ( 1+2 ) + 3and
int i = 1; i += 2; i += i + 3;is same as writing:
int i = 1; i = i + 2; // i = 3 i = i + i + 3; // i = 3+3+3Cetin