2012-11-09 170 views
2

可能重複:
Which is preferred: Nullable<>.HasValue or Nullable<> == null?檢查是否可爲空的布爾爲空或不是

我知道這樣的問題已經被問了很多次。但我從來沒有找到一個如何檢查一個可爲空的布爾值是否爲空的答案。 這裏是一個答案,我有這樣的:

bool? nullableBool; 
if (nullableBool == true){ 

}else if (nullableBool == false){ 

}else{ 

} 

但我在想,如果有,以減少無用的代碼更好,更開門見山的方式? 謝謝。

+3

這不是一個可空的布爾。這是一個尚未分配值的布爾值 – musefan

+3

應該是'bool?',對不對? –

+1

@Paolo編輯這樣的帖子並沒有幫助;它正確地告訴OP他做錯了所有的答案無效,但它仍然沒有使代碼正確。 – Rawling

回答

12
if (!nullableBool.HasValue) 
{ 
    // null 
} 

您也可以直接將其與null進行比較。

編輯:

你的nullableBool聲明應該是:

bool? nullableBool; 
+0

不適用於OP的代碼 – musefan

+4

@musefan是公平的,這是OP的代碼的錯... –

+0

@MarcGravell:也許,但無論哪種方式,這個答案仍然不起作用 – musefan

0

試試這個PLZ:

if (!nullableBool.HasValue) 
{ 
    // your code 
} 
+0

oops同樣的答案3次。 – bonCodigo

+4

你爲什麼要投票我失望? – bonCodigo

2

這不是一個可空bool,這是一個未分配bool和你的代碼不會編譯。您需要使用bool?Nullable<bool>

bool? nullableBool = null; // or = true or = false 
if (nullableBool.HasValue) 
{ 
    if (nullableBool.Value) 
     // true 
    else 
     // false 
} 
else 
    // null 
1

首先,你已經使用了布爾不可爲空。要創建一個可空布爾值,你可以做一個FO如下:

Nullable<bool> nullableBool; 

或簡寫:

bool? nullableBool; 

任一可再進行檢查,看它是否使用下面有一個值:

if(nullableBool.HasValue) 
{ 
    //nullableBool has been assigned a value 
} 

您不推薦使用目前的方法。如果你需要一個可空的狀態,那麼使用一個可空的布爾值。如果你想使用標準布爾值,那麼一定要給它賦值。我很驚訝你沒有得到與該代碼在Visual Studio中的編譯錯誤。