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