2013-12-19 53 views
1

如果你有在C#中的if語句來檢查多個條件:AND/OR(&&/||)邏輯多重條件語句

if (a == 5 && b == 9) { ... } 

是否b == 9仍然可以檢查是否a == 5條件是錯誤的,還是會自動退出,因爲再也無法通過了?

同樣,對於一個或if語句:

if (a == 5 || b == 9) { ... } 

威爾b == 9仍然得到,如果一個== 5是真實的檢查?

+3

對不起,但請閱讀[手冊](http://msdn.microsoft.com/en-us/library/2a723cdk.aspx)。這是一個可以通過文檔回答並自行嘗試的問題。 –

+0

@TimSchmelter夠公平的。我想我只是不知道如何在搜索引擎 – miguelarcilla

+0

中提出你的要求_operators_的功能。所以下次你可以在搜索中包含這個詞,f.e. 「C#運營商」。 –

回答

12

&&||都是「短路」運算符,這意味着如果從左操作數得知答案,則不評估右操作數。

這意味着:

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,但由於&&短路,如果anull,表達意志不評估其餘部分,因此不會拋出異常。

顯然,如果你有&更換&&,它會拋出該異常如果任aa.SomePropertynull

1

爲:if (a == 5 && b == 9) { ... }

是否b == 9仍然得到遏制,如果== 5條件是假的,或者它 自動退出,因爲沒有辦法,這可能傳遞了嗎?

如果a == 5false沒有任何其他控件將在該行上執行。

爲:if (a == 5 || b == 9) { ... }

將b == 9仍然得到遏制,如果== 5是真的嗎?

立即通過,因爲第一個條件已經滿足要求。

2

概念上,&&||短路。

但是由於您沒有任何副作用,JIT編譯器可以自由移除短路。我不知道它是否真的這樣做。

-1

,並檢查 a==5 如果爲真,那麼 會去別的b==9 不會b==9。 in OR: 它會檢查a==5b==9

+0

嗨user3119036歡迎來到SA。你的回答是確定的,但需要一些解析檢查我做了什麼。 – Nahum

0

使用AND運算符,根據布爾邏輯,必須將所有條件評估爲TRUE。如果其中只有一個不滿意,則條件的結果將爲FALSE。

是否b == 9如果== 5條件爲假仍然得到遏制,或者它 自動退出,因爲沒有辦法,這可能傳遞了嗎?

它會自動退出,因爲第一個條件是錯誤的,結果已知。

對於OR運算符,您至少需要一個條件爲TRUE,並執行邏輯。如果第一個不滿意,應用程序將檢查其他條件。

如果== 5爲真,是否仍會檢查b == 9?

不,它不會被檢查,因爲第一個條件是TRUE,因此沒有必要檢查另一個條件。

+0

我想了解這個downvote的原因.. –

0

短標準是由標準定義的。否則,就不可能說什麼是表達的結果,如:

if (a != null && a.IsValid) { ... } 

在一些C#編譯器會工作得很好,在某些人會引起異常。這就是爲什麼標準在那裏來定義共同的行爲。

編輯:澄清最後的聲明。