2017-09-04 70 views
1

我不看C#的每一天,和正在讀最近提交的東西,是扔我:C#:周圍的空間!運營商,如何解釋?

if ((length > maxLength) && ! IsTable(furniture.FurnitureType)) 
do_something; 

我有麻煩精神上解析& &和!運營商,特別是因爲!操作員之後有空間。

的問題可以概括爲以下:

是(含空格)

if ((length > maxLength) && ! IsTable(furniture.FurnitureType)) 

一樣(無空格):

if ((length > maxLength) && !IsTable(furniture.FurnitureType)) 

具體問題是:

  • 是IsTable(),是否屬實或錯誤,改變評估?
  • 之後的空間!基本上讓第一個eval做所有的工作?

或者,有什麼我缺少可接受的語法。

+0

define * controls * –

+1

你有問題......「解析」那個?你是試圖以編程方式閱讀還是試圖理解它的作用? bang運算符代表「不」,它通常附加在它的右邊。 – Felype

+1

僅當length> maxlength爲true時,纔會調用IsTable。如果它是真的,則調用IsTable,如果返回false,則邏輯NOT運算符(!)應用於假返回值,從而執行_do_something_。空間是沒有意義的, – Steve

回答

5

在C#中,&&運算符表示僅在第一個條件爲true時才檢查第二個條件。

因此,只有在(length > maxLength)true時,纔會檢查!IsTable(furniture.FurnitureType)條件。

當C#編譯時,它忽略大多數運算符之後的空格,如!。所以!之後的空間是沒有意義的。

! IsTable(furniture.FurnitureType) 

就像是:

!IsTable(furniture.FurnitureType) 

,這意味着,如果IsTable(furniture.FurnitureType)true,其結果false,和周圍的其他方法。

所以,你的整個if條款將true只有length > maxLength和你FurnitureType不是表。椅子,書桌,壁櫥,甚至凳子。但不是一張桌子。

+0

的確,運營商之後的空間並不意味着什麼,但如果運營商之間的空間將運營商與其他運營商分開,那麼運營商附近的空間可能意味着什麼。一個人爲的例子是'+ + a'與'++ a'或'++ a'不一樣。 –

+0

@ LasseV.Karlsen謝謝你指出。我重申了我的答案。 –

+1

如果你問我,沒有必要這麼做,我指出這只是爲了挑選一個非常人爲的角落案例:) –