我总是在OR表达式中使用||
(两个管道),无论是在C#还是在PHP中.偶尔我会看到使用一根管道:|
.这两种用法有什么区别?在使用其中一个时是否有任何注意事项,或者它们是否可以互换?
我总是在OR表达式中使用||
(两个管道),无论是在C#还是在PHP中.偶尔我会看到使用一根管道:|
.这两种用法有什么区别?在使用其中一个时是否有任何注意事项,或者它们是否可以互换?
就像&
和&&
运算符一样,双倍运算符也是"短路"运算符.
例如:
if(condition1 || condition2 || condition3)
如果条件1为真,则不判断条件2和3.
if(condition1 | condition2 | condition3)
这将判断条件2和3,即使1已经为真.由于您的条件可能是非常昂贵的函数,因此使用它们可以获得良好的性能提升.
There is one big caveat, NullReferences or similar problems. 例如:
if(class != null && class.someVar < 20)
如果类为null,则If语句将在class != null
为false后停止.如果只使用&;,它会try 判断class.someVar
,你会得到一个很好的NullReferenceException
.对于Or操作符,这可能不是一个很大的trap ,因为你不太可能触发一些不好的事情,但要记住这一点.
不过,没有人会使用单一的&
或|
运算符,除非您的设计中每个条件都是一个必须执行的函数.听起来像是设计的味道,但有时(很少)这是一种干净的做事方式.运算符&
确实"运行这3个函数,如果其中一个返回False,则执行其他挡路",而第|
则"只有在没有返回False的情况下才运行其他挡路"-这可能是有用的,但正如所说的,这通常是一种设计气味.
不过|
和&
操作符还有第二种用法:Bitwise Operations.