Потому что 0
- это int, который неявно преобразуется в объект (в штучной упаковке), и вы не можете распаковать упакованный int напрямую в short. Это будет работать:
short s = (short)(int)(nullObj ?? 0);
В штучной упаковке T
(где T
, конечно, тип значения, не допускающий значения NULL), можно распаковать только в T
или T?
.