2011-11-18 53 views
2
private bool? _success; 
    public bool Success 
    { 
     get 
     { 
      return _success ?? (_success = false); 
     } 
    } 

为什么编译器不能计算出正确的操作数始终为false,并且需要我将其转换为boolC#可空性明确强制转换需要

+0

请注意,如果你永远读'_success'直接,你不妨只使用自动属性'Success'和报废'_success考虑'(用'私人设置')。 'bool'默认为'false'。当然,如果没有隐含的'_success'为'null'的私有实现细节,那么这只是确定的。 – Brian

回答

9

由于您指定给bool? _success,因此右操作数为Nullable<bool>。这不能隐式地转换为布尔,这就是为什么需要转换。

如果删除任务,那么它会很好地工作:

return _success ?? false; 

此作品为“假”是bool了。

但是,当前的代码在为其分配值false后返回_successAs _successbool?,右侧操作数返回bool?,而不是bool

0

你会使用GetValueOrDefault()通常这样写:

private bool? _success; 

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

第二个不会编译 - 它有同样的问题。第一个作品,但有不同的逻辑(因为它不再*'_success'分配给'false'(但我同意,这是一个更常见的用法...) –

+1

Wooops!你就是!它... – Reddog