Difference between a+=1 and a=a+1 in C#

后端 未结 3 929
眼角桃花
眼角桃花 2021-01-24 23:20

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

相关标签:
3条回答
  • 2021-01-25 00:00

    The compiler is probably treating the 5 as an Int32 in the second one. You'll need to cast it

    0 讨论(0)
  • 2021-01-25 00:09

    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.

    0 讨论(0)
  • 2021-01-25 00:13

    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.

    0 讨论(0)
提交回复
热议问题