有谁知道为什么最后一个不起作用?
object nullObj = null;
short works1 = (short) (nullObj ?? (short) 0);
short works2 = (short) (nullObj ?? default(short));
short works3 = 0;
short wontWork = (short) (nullObj ?? 0); //Throws: Specified cast is not valid
答案 0 :(得分:15)
因为0
是一个int,它被隐式转换为一个对象(盒装),并且你不能将一个盒装的int直接解包为short。这将有效:
short s = (short)(int)(nullObj ?? 0);
装箱T
(当然T
是不可为空的值类型)可能只会被T
或T?
取消装箱。
答案 1 :(得分:5)
最后一行中的null-coalescing运算符的结果是一个加框的int
。然后,您尝试将其解包到short
,但在执行时以您显示的方式失败。
就像你这样做了:
object x = 0;
short s = (short) x;
null-corangecing运算符的存在在这里有点像红鲱鱼。