为什么条件运算符总是在C#中返回一个int?

时间:2010-03-01 14:54:42

标签: c# types conditional-operator

  

可能重复:
  Conditional operator cannot cast implicitly?

使用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;)?

2 个答案:

答案 0 :(得分:3)

这是因为你的1和2是int s。 ?:返回的类型与您的第二和第三个操作数相同。


编辑:在我的VS2008上,这可行:

short x = true ? 1 : 2;

我做错了吗?


编辑:的确,不同之处在于true是编译时常量。对于非常量表达式,我得到了相同的错误消息。

答案 1 :(得分:3)

并不是条件运算符(AKA三元运算符)总是返回整数,这是因为你的文字是整数。

不幸的是,C#似乎没有字节或短路的文字说明符(尽管它们也适用于长篇)。