我知道null算术运算符如果不为null则返回左手操作数,但是我没有看到任何人在if语句中使用它,例如:
if (car.IsSold ?? false)
...
我猜这意味着car.IsSold不为null,然后继续执行if语句,否则跳出该语句。那正确吗?如果是,为什么程序员不应该使用
if (car.IsSold)
...
哪个功能完全相同? 如果有人为我解决了这个问题,我将不胜感激。
答案 0 :(得分:1)
假设car.IsSold
可为空:
if (car.IsSold)
甚至不编译,因为bool?
不会隐式转换为bool
显式投射
if ((bool)car.IsSold)
如果car.IsSold
是null
,将引发异常
使用空值运算符
if (car.IsSold ?? false)
在这种情况下,除其他解决方案外,都可以工作。
答案 1 :(得分:0)
哪个功能完全相同?
不,不是。因为bool?
(或Nullable<bool>
)和bool
并不完全相同。
if
条件必须解析为bool
。但是bool?
可能在运行时解析为null
。因此,编译器将不允许这样做。您必须提供一种逻辑,条件是当所讨论的值为bool
时,该逻辑仍将返回null
。可能最简单的方法是null运算符和默认文字。