【发布时间】:2009-11-04 10:00:08
【问题描述】:
short s;
s = (EitherTrueOrFalse()) ? 0 : 1;
这失败了:
错误 CS0266:不能隐式 将类型“int”转换为“short”。一个 存在显式转换(你是 缺少演员表?)
谁能解释为什么会这样?我唯一能想到的是编译器不看第二个值,也不知道两者之间的范围,在这种情况下我写了类似
short s;
s = (EitherTrueOrFalse()) ? 0 : 65000;
对吗? 唯一的解决办法是使用丑陋的演员表?
此外,C# 似乎没有短类型的类型后缀。这是一个非常严重的监督 IMO。否则,这将是一个解决方案......
【问题讨论】:
-
你说得对,short 类型没有类型后缀。
-
short 类型没有类型后缀,但我几乎不会称其为“严重疏忽”。不知何故,我们 .net 开发人员设法应对了这种令人发指的残疾......
-
嗯,出于某种原因,VB 拥有它...
-
条件运算符中的 int/short 常量转换实际上会导致一些有趣的语言设计问题。如果您对这个主题感兴趣,请blogs.msdn.com/ericlippert/archive/2006/05/24/…
标签: c# ternary-operator implicit-conversion