一尘不染

| |之间有什么区别?和|| 还是运营商?

c#

我一直||在C#和PHP的OR表达式中使用过(两个管道)。有时我会看到一个使用的管道:|。这两种用法有什么区别?在彼此之间使用时是否存在一些警告或可以互换?


阅读 264

收藏
2020-05-19

共1个答案

一尘不染

就像&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来说,这可能不是陷阱,因为您不太可能触发不良事件,但要记住这一点。

但是,没有人会使用单数&|运算符,除非您设计的每个条件都是要执行的功能。听起来像是设计的气味,但有时(很少)是一种做事的干净方法。该&操作者“跑这3个功能,如果其中一个返回false,执行else块”,而|不会“只运行else块,如果没有回报假”
-可能是有用的,但正如所说,往往这是一个设计闻。

尽管有|and
&运算符的第二种用法:按位运算

2020-05-19