在这种情况下,使用 | 有什么区别?或使用双 || ?
if (char.IsNumber(e.KeyChar) | e.KeyChar == (char)8 | e.KeyChar == (char)Keys.Escape)
{
e.Handled = false;
return;
}
else
{
e.Handled = true;
return;
}
在这种情况下,使用 | 有什么区别?或使用双 || ?
if (char.IsNumber(e.KeyChar) | e.KeyChar == (char)8 | e.KeyChar == (char)Keys.Escape)
{
e.Handled = false;
return;
}
else
{
e.Handled = true;
return;
}
在 OR 的情况下使用双运算符时,如果找到一个真正的条件,它会停止检查其余条件。
在 & 的情况下,如果它发现一个错误的条件,也会发生同样的事情
在您的示例中:
这里验证了三个条件
但:
如果第一个条件不满足,但第二个条件满足,则不评估第三个条件并输入“if”。
据微软称:
使用
|
左右所有表达式时。而当使用 || 时,它只从左到右进行评估。@Sr1871 引用了来自 SO/English 的答案,并且有一个答案可能有帮助:
正如在接受的答案中已经解释的那样,使用二元运算符
|
,所有布尔表达式都被评估。相反,使用条件运算符执行
||
所谓的“短路”评估。也就是说,当评估的最终结果不能再改变时,即使其他表达式仍在评估,布尔表达式的评估也会停止。在您提出的示例中,差异几乎为零。但是对于这个非常常见的示例,差异很明显:
在这种情况下,使用运算符
||
可以避免NullReferenceException
whenobj == null
,因为在这种情况下不会计算第二个表达式。相反,如果使用二元运算符
|
:...那么是
obj == null
的,您将收到一个NullReferenceException
.因此,很少将二元运算符
|
与布尔表达式一起使用。最常见的是,此运算符与整数值一起使用以OR
按位执行。