C#中+ = 1和a = a + 1之间的差异

我发现在C#中,a + = 1不等于a = a + 1。

例如,以下代码编译时没有任何错误:byte b = 10; b + = 5;

而以下代码有一个编译错误:byte b = 10; b = b + 5;

有人能让我知道为什么吗?

因为b + 5变成整数(Int32)(主要是因为有可能过载)

复合赋值规范如下:

否则,如果所选运算符是预定义运算符,如果所选运算符的返回类型可显式转换为x类型,并且如果y可隐式转换为x类型或运算符是移位运算符,则操作被评估为x =(T)(x op y) ,其中T是x的类型,除了x仅被计算一次。

因为b += 5被编译为好像它读取b = (byte)(b + 5) 。 演员负责转换为正确的类型,因此没有错误。

编译器可能在第二个中将5视为Int32。 你需要施展它