当我在VS中编写此代码时,它不起作用(“无法将'int'隐式转换为'short'。存在显式转换。您是否错过了演员?”):
short A = 5;
short B = 1 << A;
然而,这段代码绝对没问题:
short A = 1 << 5;
我知道我可以通过将整个表达式作为简短表达来消除错误,但任何人都可以告诉我为什么会发生这种情况吗?
答案 0 :(得分:5)
因为A不是文字,所以编译器不知道结果可以表示为short
。因此需要一个明确的演员。使用文字5,编译器会看到结果为32,可以放在short
中。
答案 1 :(得分:2)
C#语言规范4.0在6.1.9中说明:
int类型的常量表达式(第7.18节)可以转换为类型 sbyte,byte,short,ushort,uint或ulong,提供了值 constant-expression在目标类型的范围内。
常量表达式的转换是其中隐含的特殊情况之一(6.1)。