如果是C#中的/ else语句

在此处输入图像描述

为什么这样做?

private void button1_Click(object sender, EventArgs e) { if (!checkBox1.Checked) { MessageBox.Show("The box is not checked!"); } if (checkBox1.Checked == true) { if (label1.BackColor == Color.Red) { label1.BackColor = Color.Blue; } else { label1.BackColor = Color.Red; } } } 

但这不是吗?

  private void button1_Click(object sender, EventArgs e) { if (!checkBox1.Checked) { MessageBox.Show("The box is not checked!"); } if (checkBox1.Checked == true) { if (label1.BackColor == Color.Red) { label1.BackColor = Color.Blue; } if (label1.BackColor == Color.Blue) { label1.BackColor = Color.Red; } } } 

我认为compliler会在每次按下按钮时读取行,所以在彼此之后有两个if语句应该没有任何不同。

如果是红色,则变为蓝色,如果是蓝色,则将其更改为红色。 基本上,如果首先将if更改为蓝色,则第二个, if将其更改为红色。 它以这种方式工作,因为指令是按顺序执行的,因此在第一个if之后总会检查第二个if 。 如果第一个被解雇,只要使用else if第二个if不起作用:

 // if red then change to blue if (label1.BackColor == Color.Red) { label1.BackColor = Color.Blue; } // otherwise, if blue then change to red // this condition will be checked if first "if" was false else if (label1.BackColor == Color.Blue) { label1.BackColor = Color.Red; } 

为什么第二个代码段不起作用。

因为在第二个片段中, if语句都是独立的。 颜色从第一个颜色变为蓝色后,第二个if被调用并将其颜色更改回红色。 如果你需要else if

  if (label1.BackColor == Color.Red) { label1.BackColor = Color.Blue; } else if (label1.BackColor == Color.Blue) { label1.BackColor = Color.Red; } 

这是一个逻辑问题,这是一个为什么它不起作用的例子:

 // label is blue at this point if (label1.BackColor == Color.Blue) { // we change the colour to red } // label is red at this point if (label1.BackColor == Color.Red) { // we change it back to blue } 

这些语句之间的区别是第一次使用else更改逻辑流程,因此您一次只处理1个场景(它是红色或蓝色)。 但是,在第二个中,因为它们是两个单独的语句,所以您将连续处理这两个方案。 对此有几个解决方案,最明显的(也可能是最好的)就是像你一样使用else 。 但是,您也可以使用switch

 switch (label1.BackColor) { case Color.Blue: label1.BackColor = Color.Red; break; case Color.Red: label1.BackColor = Color.Blue; break; } 

您还可以将您拥有的代码保留在第二个代码段中,但只需使用return关键字告诉您完成的function即可

 if (label1.BackColor == Color.Blue) { // change to red return; } 

或者如果你想变得非常花哨,你实际上可以完全重构if语句并在一个内衬中完成 – 虽然看起来很难看……

 label1.BackColor = checkbox1.Checked ? label1.BackColor = Color.Blue ? Color.Red : Color.Blue : label1.BackColor 

仅供参考 – if (checkbox1.Checked == true)是无意义的检查,只需使用if (checkbox1.Checked)

 private void button1_Click(object sender, EventArgs e) { if (!checkBox1.Checked) MessageBox.Show("The box is not checked!"); else label1.BackColor = (label1.BackColor == Color.Red ? Color.Blue : Color.Red); } 

如果要放置2个或更多单独的IF语句,则执行所有IF语句。

如果使用IF ELSE或SWITCH,那么将执行该序列中的任何一个。

应该使用哪种类型的陈述来决定它。