空检查属性错误

时间:2018-05-20 00:21:48

标签: c#

我对属性获取了一个简单的空值检查,但由于某种原因它不会编译。

这就是它的外观

_someObj

如果Cannot implicitly convert type `bool?' to `bool' 为空,我认为{{1}}会返回false?我误解了它的使用吗?

我得到的错误:

{{1}}

我尝试在其周围添加if语句但发生了同样的问题。

希望你能帮助解释我的误解。

2 个答案:

答案 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,但如果truefalse必须返回该值,则返回bool? }可以是truefalsenull

有两种方法可以解决这个问题。你可以这样做:

public bool IsActive => _someObject ?? false;

以上与完成相同:

public bool IsActive => _someObejct != null ? _someObject : false;

如果_someObject为空,它将返回false。另一种解决方案是将IsActive的类型更改为bool?,如下所示:

public bool? IsActive => _someObject;

并且您不必在该一个实例中使用任何空检查。每次要使用IsActive时,都必须检查它是否为空,这是不合理的。