int i = 1; i += (i += 2) + 3; Console.WriteLine("{0}", i); Console.ReadLine();Reason:
.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 overwrittenBut this gives 9
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