2

可能重复:
条件运算符不能隐式转换?

使用条件运算符编写语句时,如果任一表达式是数值,则它们始终被解释为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;)中那样知道这两个值都是有效值吗?

4

2 回答 2

3

这是因为你的 1 和 2 是ints。?:在您的情况下,返回与第二个和第三个操作数相同的类型。


编辑:在我的 VS2008 这有效:

short x = true ? 1 : 2;

我做错什么了吗?


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

于 2010-03-01T14:56:39.267 回答
3

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

不幸的是,C# 似乎没有字节或短裤的文字说明符(尽管它们有 long)。

于 2010-03-01T14:56:48.660 回答