C# - 检查一个bool值,然后翻转它

时间:2010-05-01 00:09:24

标签: c# xor

for (int i = 0; i < X; i++)
   myitem = (checkedDB) ? dirtyItem : cleanItem;

我想知道是否有一种在同一语句中翻转checkedDB的方法,即下一次迭代checkedDB与它的值相反,所以就像XORing一样。

3 个答案:

答案 0 :(得分:6)

怎么样:

for (int i = 0; i < X; i++)
    myitem = !(checkedDB = !checkedDB) ? dirtyItem : cleanItem;

初看起来可能并不是真的可读/可理解,但它在一个声明中做了你想要的。

答案 1 :(得分:3)

最好的答案,IMO,是:如果你有任何自尊,那就不是了。结果将是丑陋和混乱,并没有真正的收获。以下是两种截然不同的解决方案,它们更清晰,更易于理解。

for (int i = 0; i < X; i++)
{
    myitem = checkedDB ? dirtyItem : cleanItem;
    checkedDB = !checkedDB;
}

以下版本甚至不需要额外的变量来实现您的单线目标:

for (int i = 0; i < X; i++)
{
    myitem = i%2 == 0 ? dirtyItem : cleanItem;
}

答案 2 :(得分:0)

切换布尔值的一种方法是bool ^= true

for (int i = 0; i < X; i++)
{
   myitem = (checkedDB ^= true) ? cleanItem : dirtyItem;
}

我交换了cleanItemdirtyItem,因为您在选择其中一个之前切换checkedDB

使用checkedDb ^= true优于checkedDB = !checkedDB的好处是很明显,您打算修改checkedDB并且不会意外地错误输入==比较。

由于您尚未指定语言,我无法确定您的语言是否允许在三元运算符的条件部分进行赋值。