2016-05-19 165 views
-1

比方說,你有C#爲什麼a = SomeFunction()會執行如果a == false?

class Program 
{ 
    static void Main() 
    { 
     bool a = GetFalse(); 
     if (a) 
     { 
      a = GetTrue(); 
     } 

     bool b = GetFalse(); 
     b &= GetTrue(); 
    } 

    static bool GetFalse() => (false); 

    static bool GetTrue() => (true); 
} 

爲什麼會GetTrue()b已經是假的被執行?

不應該&=運營商認識到它永遠不會評價爲真?

+0

否 - '&='運營商等同於'X = X&y'並不會短路。 –

+1

更簡單的解釋是&是一個按位運算符,並且要執行按位操作,您需要兩個操作數的二進制值,因此即使第一個操作數爲假,也需要執行第二個部分。 – zoubida13

+0

@ zoubida13'&'在整型上只是一個按位運算符 - 它們都是布爾類型的布爾運算符。 –

回答

5

因爲x &= y只是x = x & y的簡寫。 &不是短路,因此y的評估值與x的值無關,即使對於bools也是如此。

對於bools,具體而言,&的短路版本:&&。有沒有&&=運營商,雖然如此,你需要單獨做到這一點:

b = b && GetTrue(); 
+0

是否存在短路等效物? –

+1

@roryap不在一個操作符中 - 必須使用'x = x && y' –

相關問題