我们说你有
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 :(得分:5)
因为x &= y
只是x = x & y
的简写。 &
不是短路,因此无论y
的值是什么,x
都会被评估,即使对于bools也是如此。
对于bool,具体来说, 是&
:&&
的短路版本。但是,没有&&=
运算符,因此您需要单独执行此操作:
b = b && GetTrue();