[英]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.