Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
当我在 VS 中编写此代码时,它不起作用(“无法将'int'隐式转换为'short'。存在显式转换。您是否缺少演员表?”):
short A = 5; short B = 1 << A;
然而这段代码绝对没问题:
short A = 1 << 5;
我知道我可以通过将整个表达式转换为简短来消除错误,但是谁能告诉我为什么会发生这种情况?
因为 A 不是文字,所以编译器不知道结果可以表示为 a short。因此它需要一个明确的演员表。使用文字 5,编译器会看到结果是 32,它可以放入short.
short
C# 语言规范 4.0 在 6.1.9 中声明:
如果常量表达式的值在目标类型的范围内,则 int 类型的常量表达式(第 7.18 节)可以转换为 sbyte、byte、short、ushort、uint 或 ulong 类型。
常量表达式的转换是隐含的特殊情况之一(6.1)。