如果你有在C#中的if語句來檢查多個條件:AND/OR(&&/||)邏輯多重條件語句
if (a == 5 && b == 9) { ... }
是否b == 9仍然可以檢查是否a == 5條件是錯誤的,還是會自動退出,因爲再也無法通過了?
同樣,對於一個或if語句:
if (a == 5 || b == 9) { ... }
威爾b == 9仍然得到,如果一個== 5是真實的檢查?
如果你有在C#中的if語句來檢查多個條件:AND/OR(&&/||)邏輯多重條件語句
if (a == 5 && b == 9) { ... }
是否b == 9仍然可以檢查是否a == 5條件是錯誤的,還是會自動退出,因爲再也無法通過了?
同樣,對於一個或if語句:
if (a == 5 || b == 9) { ... }
威爾b == 9仍然得到,如果一個== 5是真實的檢查?
&&
和||
都是「短路」運算符,這意味着如果從左操作數得知答案,則不評估右操作數。
這意味着:
a && b
b
不會,如果a
是假的,因爲評估的最終答案是已知的。
同樣:
a || b
b
如果a
是真實的,因爲最終的答案已經知道不會被評估。
如果你想想要兩個操作數進行評估,請使用&
和|
操作符來代替。
這樣做的好處是,您可以編寫表達式,如果所有操作數都被評估,則表達式將失敗。下面是一個典型的if語句:
if (a != null && a.SomeProperty != null && a.SomeProperty.Inner != null)
... use a.SomeProperty.Inner
如果是空的,表達將繼續評估a.SomeProperty
,它會拋出一個NullReferenceException
,但由於&&
短路,如果a
是null
,表達意志不評估其餘部分,因此不會拋出異常。
顯然,如果你有&
更換&&
,它會拋出該異常如果任a
或a.SomeProperty
是null
。
爲:if (a == 5 && b == 9) { ... }
是否b == 9仍然得到遏制,如果== 5條件是假的,或者它 自動退出,因爲沒有辦法,這可能傳遞了嗎?
如果a == 5
是false
沒有任何其他控件將在該行上執行。
爲:if (a == 5 || b == 9) { ... }
將b == 9仍然得到遏制,如果== 5是真的嗎?
立即通過,因爲第一個條件已經滿足要求。
概念上,&&
和||
短路。
但是由於您沒有任何副作用,JIT編譯器可以自由移除短路。我不知道它是否真的這樣做。
,並檢查 a==5
如果爲真,那麼 會去別的b==9
不會去b==9
。 in OR: 它會檢查a==5
和b==9
。
嗨user3119036歡迎來到SA。你的回答是確定的,但需要一些解析檢查我做了什麼。 – Nahum
使用AND運算符,根據布爾邏輯,必須將所有條件評估爲TRUE。如果其中只有一個不滿意,則條件的結果將爲FALSE。
是否b == 9如果== 5條件爲假仍然得到遏制,或者它 自動退出,因爲沒有辦法,這可能傳遞了嗎?
它會自動退出,因爲第一個條件是錯誤的,結果已知。
對於OR運算符,您至少需要一個條件爲TRUE,並執行邏輯。如果第一個不滿意,應用程序將檢查其他條件。
如果== 5爲真,是否仍會檢查b == 9?
不,它不會被檢查,因爲第一個條件是TRUE,因此沒有必要檢查另一個條件。
我想了解這個downvote的原因.. –
短標準是由標準定義的。否則,就不可能說什麼是表達的結果,如:
if (a != null && a.IsValid) { ... }
在一些C#編譯器會工作得很好,在某些人會引起異常。這就是爲什麼標準在那裏來定義共同的行爲。
編輯:澄清最後的聲明。
對不起,但請閱讀[手冊](http://msdn.microsoft.com/en-us/library/2a723cdk.aspx)。這是一個可以通過文檔回答並自行嘗試的問題。 –
@TimSchmelter夠公平的。我想我只是不知道如何在搜索引擎 – miguelarcilla
中提出你的要求_operators_的功能。所以下次你可以在搜索中包含這個詞,f.e. 「C#運營商」。 –