2016-05-19 167 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' –

相关问题