我如何检查bool是假的还是真的然后做某事?

时间:2014-02-07 14:29:06

标签: c# winforms

public void globalPb_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Middle)
            {
                if (pause == false)
                {
                    for (int i = 0; i < pbs.Length; i++)
                    {
                        pbs[i].PauseAnimate();
                        pause = true;
                    }
                }
                if (pause == true)
                {
                    for (int i = 0; i < pbs.Length; i++)
                    {
                        pbs[i].ContinueAnimate();
                    }
                    pause = false;
                }

            }
        }

我希望如果变量pause为false则暂停,如果为true,则继续。 但是在检查它是否为假的IF中我将其设置为true,然后检查它是否为真,以便它永远不会暂停。

我应该怎么做检查的逻辑?

2 个答案:

答案 0 :(得分:5)

尝试使用声明的else部分:

if (!pause) {
  for (int i = 0; i < pbs.Length; i++) {
    pbs[i].PauseAnimate();
  }
  pause = true;
} else {
  for (int i = 0; i < pbs.Length; i++) {
    pbs[i].ContinueAnimate();
  }
  pause = false;
}

为了进一步清理它,我可能会先写下真正的部分:

for (int i = 0; i < pbs.Length; ++i) {
  if (paused) {
    pbs[i].ContinueAnimate();
  } else {
    pbs[i].PauseAnimate();
  }
}
pause = !pause;

答案 1 :(得分:4)

您不需要if (pause == false),可以执行if (!pause),也可以执行if ... else ...,所以现在获得:

if (pause)
{
  for (int i = 0; i < pbs.Length; i++)
  {
    pbs[i].ContinueAnimate();
  }
  pause = false;
}
else
{
  for (int i = 0; i < pbs.Length; i++)
  {
    pbs[i].PauseAnimate();
  }      
  pause = true;
}

请注意,我将其重新排列为if (pause) ... else ...,这比if (!pause) ... else ...更直观。我还略微重新排列了你的for循环,所以它们看起来一样 - 这甚至可以引导你进入一个完全重构的解决方案:

public void globalPb_MouseDown(object sender, MouseEventArgs e)
{
  if (e.Button == MouseButtons.Middle)
  {
    for (int i = 0; i < pbs.Length; i++)
    {
      AnimatePauseOrContinue(pause, pbs[i]);
    }
    pause = !pause;
  }
}
public void AnimatePauseOrContinue(bool shouldPause, pbType pb)
{
  if (shouldPause)
    pb.PauseAnimate();
  else
    pb.ContinueAnimate();
}