簡體   English   中英

如何在C#中縮短if-else-if語句

[英]How to shorten if-else-if statement in c#

有人可以縮短此代碼嗎? 有14個按鈕和8個文本框。 如果文本框不為空且不為空,則將執行該操作,然后單擊該文本框時,與文本框中字母對應的按鈕將再次可見,從而使文本框為空。

 private void txt1_Click(object sender, EventArgs e)
 {
        if (txt1.Text == "J")
        {
            txt1.Text = "";
            btn1.Visible = true;
        }
        else if (txt1.Text == "M")
        {
            txt1.Text = "";
            btn2.Visible = true;
        }
        else if (txt1.Text == "Y")
        {
            txt1.Text = "";
            btn3.Visible = true;
        }
        else if (txt1.Text == "E")
        {
            if (btn4.Visible == true)
            {
                txt1.Text = "";
                btn5.Visible = true;
            }
            else
            {
                txt1.Text = "";
                btn4.Visible = true;
            }
        }
        else if (txt1.Text == "Q")
        {
            txt1.Text = "";
            btn6.Visible = true;
        }
        else if (txt1.Text == "L")
        {
            if (btn7.Visible == true)
            {
                txt1.Text = "";
                btn10.Visible = true;
            }
            else
            {
                txt1.Text = "";
                btn7.Visible = true;
            }
        }
        else if (txt1.Text == "B")
        {
            txt1.Text = "";
            btn8.Visible = true;
        }
        else if (txt1.Text == "C")
        {
            txt1.Text = "";
            btn9.Visible = true;
        }
        else if (txt1.Text == "P")
        {
            txt1.Text = "";
            btn11.Visible = true;
        }
        else if (txt1.Text == "I")
        {
            txt1.Text = "";
            btn12.Visible = true;
        }
        else if (txt1.Text == "K")
        {
            txt1.Text = "";
            btn13.Visible = true;
        }
        else if (txt1.Text == "O")
        {
            txt1.Text = "";
            btn14.Visible = true;
        }
}

假設所有btn變量都是類狀態的一部分,則可以這樣聲明一個方法:

public Button Click(String txt) {
    switch(txt) {
        case "J":
            return btn1;
        case "M":
            return btn2;
        case "Y":
            return btn3;
        case "E":
            return (btn4.Visible ? btn5 : btn4);
        case "Q":
            return btn6;
        case "L":
            return (btn7.Visible ? btn10 : btn7);
        case "B":
            return btn8;
        case "C":
            return btn9;
        case "P":
            return btn11;
        case "I":
            return btn12;
        case "K":
            return btn13;
        case "O":
            return btn14;
    }
    return null;
}

然后您將其稱為:

var button = Click(txt1.Text);
if(button != null) {
    button.Visible = true;
    txt1.Text = "";
}

但是,如果btn變量具有局部作用域,則可以使用以下方式定義內聯Func<String,Button>委托,而不是方法:

Func<String, Button> Click = txt => {
    switch(txt) {
        ...
    }
};

您仍然必須處理特殊情況( "E""L" ),但是您可以使用Dictionary<string, Button>來進行查找:

var buttonDictionary = new Dictionary<string, Button>();
buttonDictionary["J"] = btn1;
buttonDictionary["M"] = btn2;
//etc...

if (buttonDictionary.Keys.Contains(txt1.Text))
{
    txt1.Text = "";
    buttonDictionary[txt1.Text].Visible = false;
}

這將減少大多數重復代碼。

對此:建議您回去考慮更合理的方法來做您正在做的事情。

根據我的經驗,代碼中if-else的巨大鏈條都表示某個地方存在邏輯問題。

另外,請熟悉switch語句

暫無
暫無

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

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