在if语句(C#)中使用空合并运算符

时间:2018-10-08 17:13:29

标签: c#

我知道null算术运算符如果不为null则返回左手操作数,但是我没有看到任何人在if语句中使用它,例如:

if (car.IsSold ?? false)
 ...

我猜这意味着car.IsSold不为null,然后继续执行if语句,否则跳出该语句。那正确吗?如果是,为什么程序员不应该使用

if (car.IsSold)
...

哪个功能完全相同? 如果有人为我解决了这个问题,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

假设car.IsSold可为空:

if (car.IsSold)

甚至不编译,因为bool?不会隐式转换为bool


显式投射

 if ((bool)car.IsSold)
如果car.IsSoldnull

将引发异常


使用空值运算符

if (car.IsSold ?? false)

在这种情况下,除其他解决方案外,都可以工作。

答案 1 :(得分:0)

  

哪个功能完全相同?

不,不是。因为bool?(或Nullable<bool>)和bool并不完全相同。

if条件必须解析为bool。但是bool? 可能在运行时解析为null。因此,编译器将不允许这样做。您必须提供一种逻辑,条件是当所讨论的值为bool时,该逻辑仍将返回null。可能最简单的方法是null运算符和默认文字。