MonoDevelop建议改变这一点:

if (someBoolVar)
    anotherBoolVar = true;

到这个:
anotherBoolVar |= someBoolVar;

当我将anotherBoolVar设置为false时,它也会这样做:
if (someBoolVar)
    anotherBoolVar = false;

变成:
anotherBoolVar &= !someBoolVar;

有人可以解释这些陈述如何相等吗?

最佳答案

好吧,在功能上它们是等效的。

在第一种情况下,如果anotherBoolVartrue,无论someBoolVar当前具有什么值,您都想将true设置为anotherBoolVar,替换表达式将执行此操作。

简而言之:

anotherBoolVar = anotherBoolVar | someBoolVar;

第二个替换也与其替换的代码相同,它的简称:
anotherBoolVar = anotherBoolVar & (!someBoolVar);

在这种情况下,解决方案隐藏在 bool 变量的“按位”性质中。与并使用一个反转的值(~反转someBoolVar)将有效地说出“保留!someBoolVar中设置的所有位并清除其余部分”,这意味着,如果someBoolVar为true,它将被反转为false,您将有效清除anotherBoolVar

现在,您应该这样做吗?

我认为没有。该代码按原样更具可读性。保留,甚至可能寻找一种方法,让MonoDevelop将来不要建议这些事情。

10-08 13:18