2011-11-18 55 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