簡體   English   中英

如果是C#中的/ else語句

[英]If / else statements in C#

在此輸入圖像描述

為什么這樣做?

    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 ,第二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關鍵字告訴您完成的功能即可

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,那么將執行該序列中的任何一個。

應該使用什么類型的陳述來決定它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM