谁能给我解释一下,如何输出的 Console.WriteLine(a);
在这个代码块中,等于44.谁能给我解释一下,在这个代码块中,Console.WriteLine(a);的输出如何等于44。
byte a = 200;
byte b = 100;
var c = a + b;
Console.WriteLine(c.GetType()); // output: System.Int32
Console.WriteLine(c); // output: 300
a += b;
Console.WriteLine(a.GetType());
Console.WriteLine(a); // output: 44
Console.ReadLine();
这一行。
a += b;
相当于这一行:
a = (byte) (a + b);
.... 除了 a
只评估一次。的结果是 a + b
属于 int
(本例中的值为300),并投向 byte
将其截断为8位(即 byte
类型),留下的结果是44。
来自ECMA C# 5标准的第12.18.3节。
这种形式的操作
x op= y
通过应用二进制运算符过载解析(§12.4.5)进行处理,就像操作被写成那样x op y
. 那么..,
- 如果所选操作符的返回类型隐含地可转换为x的类型,则该操作被评估为
x = x op y
但是x
只被评估一次。- 否则,如果所选操作符是一个预定义操作符,如果所选操作符的返回类型显式地转换成了
x
,如果y
隐含着可转换为类型的x
或操作者是一个轮班操作者,那么操作被评估为x = (T)(x op y)
,其中T
是一种x
但是x
只被评估一次。- 否则,复合赋值无效,并发生绑定时间错误。