我对属性获取了一个简单的空值检查,但由于某种原因它不会编译。
这就是它的外观
_someObj
如果Cannot implicitly convert type `bool?' to `bool'
为空,我认为{{1}}会返回false?我误解了它的使用吗?
我得到的错误:
{{1}}
我尝试在其周围添加if语句但发生了同样的问题。
希望你能帮助解释我的误解。
答案 0 :(得分:1)
_someObj?.IsActive
是一个可以为空的条件,因此假设IsActive
的类型为bool
,使用?.
会将结果转换为可以为空的bool bool?/Nullable<bool>
与财产的预期bool
结果发生冲突。
如果_someObj
null ,那么结果也将是 null ,因此您需要为此可能性添加null-coalescing operator
public bool IsActive {
get { return _someObj?.IsActive ?? false; }
}
答案 1 :(得分:0)
如果_someObj
为空,则必须返回null
,但如果true
或false
必须返回该值,则返回bool?
}可以是true
,false
或null
。
有两种方法可以解决这个问题。你可以这样做:
public bool IsActive => _someObject ?? false;
以上与完成相同:
public bool IsActive => _someObejct != null ? _someObject : false;
如果_someObject
为空,它将返回false。另一种解决方案是将IsActive
的类型更改为bool?
,如下所示:
public bool? IsActive => _someObject;
并且您不必在该一个实例中使用任何空检查。每次要使用IsActive
时,都必须检查它是否为空,这是不合理的。