bool? nullableVar;
if(nullableVar)
给了我一个错误但是
if(nullableVar==true)
评估罚款。
我不确定为什么会这样做,如果bool不可为空,会评价为好吗?
答案 0 :(得分:4)
撰写if (nullableVar)
会尝试将bool?
隐式转换为bool
。 (因为if
需要bool
s)
由于没有从T?
到T
的隐式转换,因此您无法做到这一点。
请注意,您也可以写
if (nullableVar ?? false)
答案 1 :(得分:4)
if
的条件表达式必须可隐式转换为bool
。 Nullable<bool>
不可转换为bool
,但第二个表达式 已经是bool
类型,所以没关系。看看IL,我相信第二个表达式正在编译为:
if (nullableVar.GetValueOrDefault())
答案 2 :(得分:1)
Nullable<T>
仅显式可转换为T
。在您的情况下,bool?
只能明确转换为bool
。你在这里尝试做的是隐式转换(显式转换需要强制转换为所需类型,而隐式转换不需要)。
您的比较是一个导致bool
的表达式,这就是允许的原因。
答案 3 :(得分:0)
if子句必须是布尔类型。 Null不是布尔类型。通过比较,您将创建一个结果为布尔值的表达式。
答案 4 :(得分:0)
可以为空的bool可以有3个不同的值:true,false或null
bool? myNullableBool;
if (myNullableBool == false)
...
非可空bool只能有2个值:true或false
bool myBool;
if (myBool)
...
答案 5 :(得分:0)
由于==
使用Equals
重载调用,而if()
期望表达式为bool
(或者Jon Skeet表示隐式可转换为bool
)。
答案 6 :(得分:0)
bool?
(例如nullableVar
)可以有三个不同的值: true , false 或 null
if(nullableVar)
null 时, nullableVar
不明确。
if(nullableVar==true)
null 时, nullableVar
显然是 false 。