[英]Is it ok to use bitwise operator in place of a logical operator like OR
这可能是愚蠢的。但是我有一个简单的疑问,假设我在函数中进行了以下检查
bool Validate(string a , string b)
{
if(a == null || b == null)
{
throw new NullReferenceException();
}
else
{
}
}
可以使用按位或进行验证,如下所示
if(a == null | b == null)
在布尔表达式(而不是整数等)中,主要区别是:短路。 ||
短路。 |
才不是。 在大多数情况下,您想短路,所以||
更为常见。 对于您而言,这无关紧要,所以||
应该被用作更期望的选择。
重要的时刻是:
if(politics.IsCeasefire() | army.LaunchTheRockets()) {
// ...
}
vs:
if(politics.IsCeasefire() || army.LaunchTheRockets()) {
// ...
}
第一个总是做这两个 (假设没有抛出异常); 如果要求停火,第二个也不会发射火箭。
在这种情况下(与bool
参数)的|
运算符不是按位运算符。 它只是逻辑or
( ||
)的非短路版本。
&
vs. &&
-这只是逻辑and
的非短路版本。
可以从副作用中看出差异,例如
bool Check()
{
Console.WriteLine("Evaluated!");
return true;
}
// Short-circuits, only evaluates the left argument.
if (Check() || Check()) { ... }
// vs.
// No short circuit, evaluates both.
if (Check() | Check()) { ... }
这应该行得通,因为当在评估为bool
事物上使用时,“按位”运算符将执行相同的逻辑运算。 但是,您可能会发现它效率较低。 C#中的逻辑运算符将短路,这意味着如果可以从第一个表达式中得出答案,则它们将跳过对第二个表达式的求值。 因此,在您的示例中,如果a == null
变为true,则||
将立即返回true
,而|
会继续检查b == null
。
如前所述,该代码确实是“确定”的。
使用单管道“ |” 将在返回结果之前对所有表达式求值。 '||' 可以提高效率,因为表达式一经计算为true就立即终止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.