给出指定类型转换的空合并运算符在int到short之间无效

本文关键字:int short 无效 之间 运算符 合并 类型转换 | 更新日期: 2023-09-27 18:19:21

有人知道为什么最后一个不工作吗?

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

给出指定类型转换的空合并运算符在int到short之间无效

因为0是int型,它被隐式地转换为对象(盒装),并且您不能直接将盒装的int型解盒为short型。

short s = (short)(int)(nullObj ?? 0);

一个盒装的T(其中T是一个非空值类型,当然)只能被打开到TT?

最后一行的空合并运算符的结果是一个框化的int。然后您尝试将其解盒到short,这在执行时以您所示的方式失败。

就像你已经这样做了:

object x = 0;
short s = (short) x;

空合并运算符的存在在这里有点转移注意力。