2017-03-17 43 views
2

一位同事和我討論了用什麼樣式來表達C#中的AND NOT條件。雖然這兩種方法都有效,但我們對運營商的風格持不同意見。他說& &!是首選的方法。例如:在C#中表達AND NOT運算符的正確方法是什麼?

db.Widget.Where(w => w.Name == "Foo" && !w.IsBlue); 

我說那會工作,但是&!將工作。例如:

db.Widget.Where(w => w.Name == "Foo" &! w.IsBlue); 

我曾經有一本關於C#風格的書,但是不記得看過這個。 SO使用什麼?

+4

如果第一個操作數爲「假」,'&&將會短路,而'&'則不會。 – 4castle

+1

強烈建議不要使用按位「&...」,雖然它可能工作,但這不是自然的,並且會讓一些編碼人員摸不着頭腦。如果需要拼寫 - 這裏沒有「不是」運算符 - 只有三個運算符按位和,布爾值和布爾值不是。 –

+1

沒有「'&&!'操作符」,也沒有「'&!'操作符」。只有'&&'和'&'運算符以及'!'運算符可以應用於'&&'和'&'運算符的操作數。查看'&&'和'&'之間區別的重複標記。 –

回答

1

它們都是 不同 邏輯和運算符。 &&是邏輯和運算符,而&對於整型類型,計算其操作數的邏輯按位與。對於bool操作數,&計算其操作數的邏輯AND,reference。一個區別是&&會短路,而&不會。

在這種特殊情況下,邏輯和更容易理解,因爲它最常用於邏輯和。如前所述,& &將短路條件例如如果&&在條件陳述中被錯誤地判斷,則右側的進一步條件將不被評估,但是&將不會短路。看下面給出的例子。

int a = 1; 
int b = 2; 
int c = 3; 
bool r = a == 2 && ++b == 2; 
Console.WriteLine(b); 
r = a == 2 & ++b == 2; 
Console.WriteLine(b); 

輸出

2 
3 

在使用&&如果a未1然後剩餘的條件不會進行評價上述的例子不與按位&區分。由於短路& & b不增加,但隨着& b的值增加,因爲沒有應用短路。

在我看來,使用& &在這裏更合適,因爲它使代碼更易於理解和短路。

+1

在C#中,'&'在bool上不是按位和運算符,而是沒有短路的邏輯和運算符:https://msdn.microsoft.com/en-us/library/sbf85k1c.aspx –

+0

Thanks @king_nak for letting我糾正了錯誤。 – Adil

相關問題