>> 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 >>>
>int i = 1; >i += (i += 2) + 3; >is same as writing:
>int i = 1; >i = i + (i = i + 2) + 3; // i = 1 + ( 1+2 ) + 3 >and
>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+3 >Cetin
int i = 1; i += ++i; // 3 and not 4