I found out that in C# a+=1 is not equal to a = a+1.
For example, the following code compiles without any error: byte b = 10; b += 5;
while the following code h
The compiler is probably treating the 5 as an Int32 in the second one. You'll need to cast it
Because b + 5
becomes an integer ( Int32) ( mainly because there is possibility of overload)
And the compound assignment specification states below:
Otherwise, if the selected operator is a predefined operator, if the return type of the selected operator is explicitly convertible to the type of x, and if y is implicitly convertible to the type of x or the operator is a shift operator, then the operation is evaluated as x = (T)(x op y), where T is the type of x, except that x is evaluated only once.
Because b += 5
is compiled as if it read b = (byte)(b + 5)
. The cast takes care of the conversion to the proper type, so there is no error.