2012-09-21 50 views
0

可能重複:
Will all methods in a logical expressions be executed?C# - OR是否像一個其他的行爲如果?

讓我解釋一下:假設我們有theese兩個代碼:

foreach(Object o in Objs) 
    if(o is Class1 || o is Class2) 
     DoSomething(); 

__

foreach(Object o in Objs) 
    if(o is Class1) 
     DoSomething(); 
    else if(o is Class2) 
     DoSomething(); 

現在,在這種情況下,OR當然是更好的了,但是我的問題不同,只是出於好奇:在第一種情況下,o是Class1類型,編譯器會停止並運行代碼,或者檢查接下來會發生什麼? 它會在第二種情況下這樣做。

回答

6

||是短路,這意味着:如果第一個參數返回true,則第二個參數是未評估。這樣,它大致等同於你的第二個例子,但更簡潔。

+0

好的,謝謝你的快速和簡潔的回覆! – KappaG3

1

MSDN Documentation for the || operator in C#

的條件或運算符(||)執行邏輯或的其布爾操作數。如果第一個操作數的計算結果爲真,則不計算第二個操作數。如果第一個操作數的計算結果爲false,則第二個運算符將確定OR表達式是否爲真或假。

注:這也是爲所有的C類語言(C,C++,Java和C#),我知道的情況下。

+0

該死的,沒想到去檢查MSDN。對不起,沒用的問題,但感謝所有在不到一分鐘的答案。 – KappaG3

1

在操作x || y中,僅當x爲假時才評估y

0

是的。

雙管或「||」如果某些條件成立,它將從左到右看,它是否會停止查找其他條件並執行該代碼段。簡單的管道或「|」會做同樣的事情,但會檢查所有的條件(所以通常你會更喜歡使用「||」)。

相關問題