快捷方式&=像&不是,,

本文关键字:不是 快捷方式 | 更新日期: 2023-09-27 18:11:12

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;上面的代码触发一个空异常。

&=运算符的行为类似于&运算符。我希望它的行为类似于&&,如果值已经为假,则跳过右边的评估(参见条件与运算符(&&)文章中对"短路"行为的解释)。

这个行为是有意的还是一个bug?

快捷方式&=像&不是,,

查看文档:&= Operator:

x &= y相当于x = x & y

(…)的,operator对整型操作数执行位逻辑与操作,对bool型操作数执行位逻辑与操作。

我猜你是想避免null检查。

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

result = result && xpto.Some;

如果你是一个经常上网的人,你可以这样写:

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

或者,在普通c#中:

if (xpto != null)
   result = result && xpto.Some;