MonoDevelop建议改变这一点:
if (someBoolVar)
anotherBoolVar = true;
到这个:
anotherBoolVar |= someBoolVar;
当我将
anotherBoolVar
设置为false
时,它也会这样做:if (someBoolVar)
anotherBoolVar = false;
变成:
anotherBoolVar &= !someBoolVar;
有人可以解释这些陈述如何相等吗?
最佳答案
好吧,在功能上它们是等效的。
在第一种情况下,如果anotherBoolVar
是true
,无论someBoolVar
当前具有什么值,您都想将true
设置为anotherBoolVar
,替换表达式将执行此操作。
简而言之:
anotherBoolVar = anotherBoolVar | someBoolVar;
第二个替换也与其替换的代码相同,它的简称:
anotherBoolVar = anotherBoolVar & (!someBoolVar);
在这种情况下,解决方案隐藏在 bool 变量的“按位”性质中。与并使用一个反转的值(
~
反转someBoolVar
)将有效地说出“保留!someBoolVar
中设置的所有位并清除其余部分”,这意味着,如果someBoolVar
为true,它将被反转为false,您将有效清除anotherBoolVar
。现在,您应该这样做吗?
我认为没有。该代码按原样更具可读性。保留,甚至可能寻找一种方法,让MonoDevelop将来不要建议这些事情。