C# seems to preserve left-hand value of an assignment statement
Consider this weird piece of code:
int[] a = new int[] { 0, 1, 2 };
int i = 2; // Point it to the last item of array
// Set the value of array indexed by i while
// changing the value of i
a[ i ] = ++i + ++i;
The code above will not cause an array's bounds overflow.
The value of i was incremented (++i) then added to its another incremented value (+ ++i),
but for some reason the left hand part seems to remember the original value of i.
I didn't know that 