使用conditional operator编写语句时,如果其中任何一个表达式是数值,则它们始终被解释为int
类型。这使得使用此运算符分配short
变量所需的强制转换。
bool isTrue = true;
int intVal = isTrue ? 1 : 2;
short shortVal = isTrue ? 1 : 2; // Compile error: Cannot implicitly convert type 'int' to 'short'.
编译器是否应该能够知道这两个值都是有效的short
值,就像在典型的赋值语句中那样(short shortVal = 1;
)?
答案 0 :(得分:3)
这是因为你的1和2是int
s。 ?:
返回的类型与您的第二和第三个操作数相同。
编辑:在我的VS2008上,这可行:
short x = true ? 1 : 2;
我做错了吗?
编辑:的确,不同之处在于true
是编译时常量。对于非常量表达式,我得到了相同的错误消息。
答案 1 :(得分:3)
并不是条件运算符(AKA三元运算符)总是返回整数,这是因为你的文字是整数。
不幸的是,C#似乎没有字节或短路的文字说明符(尽管它们也适用于长篇)。