Shortcut&= like like&not &&

public static void Main()
{
    var result = false;
    Xpto xpto = null;
    result &= xpto.Some;
}

public class Xpto
{
    public bool Some { get; set; }
}

我正在使用C#6.0 VS2015; 上面的代码触发一个空的异常。

&=运算符的行为与&运算符相同。 我希望它的行为与&&类似,并且如果值已经为false,则跳过右侧的评估(请参阅条件AND运算符(&&)文章中的“短路”行为的解释)。

这种行为是打算还是它是一个错误?


查看文档:&=操作员:

x &= y等价于x = x & y

(...)&运算符对整型操作数执行按位逻辑AND操作,对bool操作数执行逻辑AND操作。

我假设你试图避免空检查。

下面的代码不会抛出异常,因为您声明result变量为false ; 在这种情况下,语言优化将短路表达式并且不会评估第二部分:

result = result && xpto.Some;

如果你是一名班轮员,你可以通过写作来使其更加一致:

result = result && (xpto == null ? true : xpto.Some);

或者,在纯C#中:

if (xpto != null)
   result = result && xpto.Some;
链接地址: http://www.djcxy.com/p/13061.html

上一篇: Shortcut &= acting like & not &&

下一篇: Monadic null checking in C# 6.0