【发布时间】:2013-10-09 15:09:34
【问题描述】:
我今天遇到了一些检查许多错误条件的代码。一直使用单个布尔值,但不是每次都使用= 重新分配它,而是使用&= 重新分配它,从而对布尔值的先前值和新值进行位明智的与运算。代码看起来像这样:
bool result = FirstCheck();
Assert(result);
result &= SecondCheck();
Assert(result);
...
现在我很好奇为什么有人会这样做?这在逻辑上等同于重新分配布尔值,如下面的可能分支所示:
- FirstCheck 失败(返回 false)并且程序在 assert 上失败并且永远不会进入 SecondCheck
- FirstCheck 通过(返回真),程序进入 SecondCheck。如果 SecondCheck 返回 true,则结果为 true,因为 true&true = true。如果 SecondCheck 返回 false,则结果为 false,因为 true&false = false。
既然没有逻辑上的区别,还有其他原因&= 可能更可取吗?还是更有可能是一些从未更改过的旧代码的遗留物?
编辑: 澄清一下,断言始终是活动代码。实际上,我在调查错误时偶然发现了这段代码,因为断言失败了。
【问题讨论】:
标签: c# boolean-logic