快捷方式&=像&不是,,
本文关键字:不是 快捷方式 | 更新日期: 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;