为什么在C#中对布尔值使用| =运算符?

car*_*666 37 c# boolean

例:

我们发现这是一些供应商编写的代码,我们试图找出他们为什么要这样做.

bool tmp = false;

if (somecase)
   tmp = true;

if (someOtherCase)
   tmp |= true;   
Run Code Online (Sandbox Code Playgroud)

Ry-*_*Ry- 69

没有充分的理由.布尔值|= true总是如此true.这是有人试图幻想,或忘记布尔逻辑=)

将其更改为tmp = true;.

  • tmp | = someOtherCase; 会更有意义.也许它以这种方式开始,并且随意转换为更复杂的形式. (12认同)
  • @ code4life:`false | true`仍然是'true` ...你也忘记了你的布尔逻辑吗? (8认同)
  • `| = false`也没用:这是一个无操作. (2认同)

pho*_*oog 16

也许其中一个布尔文字曾经是一个变量,他们只是没有想到在更改操作数时更改运算符.显然逻辑是等价的.

更有可能的是,他们认为在第二种情况下,他们希望保留评估第一个"如果"条件的结果.当然,这是错误的推理.

一个更简单的等价声明:

bool tmp = somecase | someOtherCase;
Run Code Online (Sandbox Code Playgroud)

编辑

正如pickypg所指出的那样,这种说法可能令人困惑,因为大多数人并不期望|使用布尔值,许多人不会注意到它,或者不会考虑副作用的含义.明确的最佳方式(如果确实存在副作用)将是minitech的解决方案:只需更改|==.

或者,如果someOtherCase表达式没有副作用,请使用Jakub Konecki的解决方案:someCase || someOtherCase.


RQD*_*QDQ 7

有趣 - 看起来它正在做同等的事情:

tmp = tmp | true;
Run Code Online (Sandbox Code Playgroud)

这将始终将tmp设置为true.


Jak*_*cki 7

foo |= true是一个简短的版本foo = foo | true.

实际代码可以重写为

bool tmp = false;
tmp |= someCase;
tmp |= someOtherCase;
Run Code Online (Sandbox Code Playgroud)

甚至更好

someCase || someOtherCase
Run Code Online (Sandbox Code Playgroud)

  • 小狡辩:如果someOtherCase有副作用,`someCase | someOtherCase`会保留它们,而`someCase || someOtherCase`不会. (5认同)
  • someCase | someOtherCase (2认同)