需要C#Nullable显式强制转换

时间:2011-11-18 20:44:38

标签: c#

    private bool? _success;
    public bool Success
    {
        get
        {
            return _success ?? (_success = false);
        }
    }

为什么编译器找不到正确的操作数总是假的,并且要求我把它转换为bool

2 个答案:

答案 0 :(得分:9)

由于您要分配给Nullable<bool>,因此右操作数为bool? _success。这不能隐含地转换为bool,这就是为什么需要强制转换的原因。

如果删除作业,那么它将正常工作:

return _success ?? false;

这有效,因为“假”已经是bool

但是,当前代码在为其赋值_success后会返回falseAs _successbool?,右手操作数返回bool?,而不是bool

答案 1 :(得分:0)

您通常会使用GetValueOrDefault()

来撰写此内容
private bool? _success;

public bool Success
{
    get
    {
        return _success.GetValueOrDefault(false);
    }
}