在C#中,对数字类型的算术运算可能会导致值与任一操作数的类型不同。以下面的代码段为例:
byte x = 10;
byte y = 20;
var z = x + y;
此处z为int
。
我的问题是:
byte
个操作数的行为方式相同。然而,反编译的源代码(使用ILSpy完成)显示了差异:仅为分割和余数添加了两个操作数的显式int
强制转换,并且第二个变换参数被强制转换为int
(但后者是明确指出in the docs;没有其他int
施放在任何地方。var z = (short)(x + y);
行等同于var z1 = (short)((int)x + (int)y);
?这似乎是因为如果x
和y
都是255,则结果short
将为510(即超出byte
的范围。)我希望以编程方式确定(当给出原始操作数类型和运算符时)转换的操作数和结果类型将是什么。 This question触及了这一点,但并没有阐明规则。
提前致谢!