如果是C#中的/ else语句

时间:2013-04-27 11:55:09

标签: c# if-statement syntax

enter image description here

为什么这样做?

    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语句之后不会有任何不同。

5 个答案:

答案 0 :(得分:6)

如果它是红色,则会变为蓝色,然后如果它是蓝色,则会将其更改为红色。基本上首先,如果第一个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;
}

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

这是一个逻辑问题,这是一个无法解决的原因示例:

// 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关键字告诉您完成的功能,例如

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)

答案 3 :(得分:0)

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);
}

答案 4 :(得分:0)

如果您要使用 2个或更多单独的IF语句,则会执行所有IF语句。

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

您必须使用哪种类型的陈述来决定。