int i = 1; int j = 2; j += (i += 2) + (i += 2); // i = 5, j= 10 Console.WriteLine("i = {0}, j = {1}", i, j); Console.ReadLine();
>> 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 >>