2011-09-23 787 views
12

對於以下兩種編碼風格,是否有任何樣式共識?我更好奇,如果這是一種在C#中良好的代碼通常首選的東西,或者這是在爲編碼項目選擇樣式時決定的事情。在C#中使用if(!bool)與if(bool == false)

風格1:使用!登錄表示沒有條件

if (!myBool) 
{ 
    //Do Stuff... 
} 

樣式2:使用== false,表示在條件

if (myBool == false) 
{ 
    //Do Stuff... 
} 

感謝虛假支票!

+3

我個人比較喜歡'如果(表達式!)' - 是一致的。 – 2011-09-23 23:27:01

+12

我更喜歡:'if(!!!!!!!!!!!!! myBool){/ * do stuff * /}' –

+1

這已經在SO中以各種方式提出了,例如:[明顯不好比較布爾常量例如if(b == false)in Java?](http://stackoverflow.com/questions/2661110/is-it-bad-to-explicitly-compare-against-boolean-constants-eg-if-b-false-在)。 –

回答

27

通常慣例是

if (!myBool) 

一個地方,我不走這條路是可空布爾值。在這種情況下,我會做

if (myBool == true) 
{ 

} 

即相當於

if (myBool.HasValue && myBool.Value) 
+4

在可空的布爾值上打個電話! – 5StringRyan

+1

爲Nul,能夠您可以使用由框架提供的exarision方法varaible.GetValueOrDefault()以及 – Miguel

+0

不同意 - 對於編碼的可讀性== true/false比空/ /更清晰。 –

3

我不知道任何語言,後者是首選。使用前者。

警告!

有一個原因爲此!

這確實做你所期望的,在大多數語言:

if (x == false) 
    ... 

但如雖然它在C#細

if (x != true) 
    ... 

:C++,因爲true僅僅是1的同義詞(所以2是不是真的還是假的),這不起作用

事實上,它也可以在.NET變得棘手 - 你可以一個布爾值取整數值,而搞砸了按位運算(例如a & b可以是假的,當a爲1和b是2,即使兩者都是「真實的」)。

通常,只需使用前者而不用擔心布爾文字。

+2

在使用類型強制轉換的語言中,您可能需要使用=== –

+0

....假設您想要依賴於特定條件 –

+2

@SkyKelsey的類型強制:也可以直接說「使用Javascript」:P。 – Mehrdad

3
if(!myBool) 
{ 
    // Do Stuff here... 
} 

這是首選的版本,因爲你已經有一個包含真或假布爾變量,沒有理由做一個額外的評估if語句。

更新:

基於什麼阿奎那所說,這種格式是很好用的,除非你有一個可空布爾(例如:bool? myBool)。如果是這樣的情況下,使用前:

bool? myBool 
if (myBool == false) 
{ 
    // Do stuff here... 
}