我一直||在C#和PHP的OR表达式中使用过(两个管道)。有时我会看到一个使用的管道:|。这两种用法有什么区别?在彼此之间使用时是否存在一些警告或可以互换?
||
|
就像&and &&运算符一样,double运算符也是“短路”运算符。
&
&&
例如:
if(condition1 || condition2 || condition3)
如果condition1为true,则不会检查条件2和3。
if(condition1 | condition2 | condition3)
即使1已经为真,这也会检查条件2和3。由于您的条件可能是非常昂贵的功能,因此可以通过使用它们来提高性能。
有一个很大的警告,NullReferences或类似的问题。例如:
if(class != null && class.someVar < 20)
如果class为null,则if语句将在class != nullfalse 之后停止。如果仅使用&,它将尝试检查class.someVar并得到一个不错的NullReferenceException。对于Or- Operator来说,这可能不是陷阱,因为您不太可能触发不良事件,但要记住这一点。
class != null
class.someVar
NullReferenceException
但是,没有人会使用单数&或|运算符,除非您设计的每个条件都是要执行的功能。听起来像是设计的气味,但有时(很少)是一种做事的干净方法。该&操作者“跑这3个功能,如果其中一个返回false,执行else块”,而|不会“只运行else块,如果没有回报假” -可能是有用的,但正如所说,往往这是一个设计闻。
尽管有|and &运算符的第二种用法:按位运算。