C#如果== false,为什么执行&= SomeFunction()?

Dee*_*ena -1 c# boolean-logic boolean-operations

让我们说你有

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);
}
Run Code Online (Sandbox Code Playgroud)

为什么GetTrue()b已经错误的情况下执行?

&=操作员是否应该认识到它永远不能评估为真?

T.J*_*der 5

因为x &= y只是简写x = x & y.&没有短路,所以y无论价值如何都要评估x,即使对于bools也是如此.

对于布尔变量,具体而言,一个短路的版本&:&&.&&=但是,没有操作员,所以你需要单独完成:

b = b && GetTrue();
Run Code Online (Sandbox Code Playgroud)