【发布时间】:2013-09-01 02:09:48
【问题描述】:
first_expression 和 second_expression 的类型必须是 相同,或者必须存在从一种类型到另一种类型的隐式转换。
如果字面量没有后缀,则它具有这些类型中的第一个 它的值可以表示为:int、uint、long、ulong。
考虑:
var value = test ? (Int64)1 : 0;
0,没有后缀的十进制数字文字将被转换为int。 int 可以隐式转换为 Int64。由于这种转换只发生在一个方向上,我们可以放心地返回值将是 Int64。
但是:
var value = test ? (UInt64)1 : 0;
UInt64 和int 不能隐式相互转换,但是这段代码编译运行,结果类型为UInt64。
0 的类型在什么时候确定?
如果这两种类型可以相互隐式转换,那么你最终会得到这两种类型中的哪一种? (我认为这不会正常发生,但用户生成的类可以实现这种转换。)
先前的研究:
我发现了其他几个标题相似的问题,但它们都与 null 或可为 null 的类型有关。
相关性: 这在我的代码中很重要,因为我们会立即将此结果传递给 ByteWriter.Write,并希望最终得到正确的重载,从而写入正确的字节数。这些例子当然被大大简化了。
替代语法使结果显式可能是清晰的最佳选择,无论在没有显式转换的情况下实际发生了什么:
var value = test ? (UInt64)1 : (UInt64)0;
【问题讨论】:
标签: c# implicit-conversion conditional-operator return-type