替代If-else

时间:2014-12-08 17:00:41

标签: c# if-statement foreach

我是一名菜鸟程序员,在我上一堂课的1个月。现在我在为C#创建一个WINFORM应用程序,这应该是某种收银机吧。

表格包括: - 6个按钮,名为Drank1到Drank6 - 一个OK按钮 - 一个名为total的文本框和按钮。 - 每个“喝酒”按钮附带的重置按钮。

表单的本质是:您在文本框中键入名称,类型,内容和价格,其中一个drankbuttons获得一个名称&值。在您命名这些按钮后,您可以按下它们一定的时间,然后按总计以获得每种饮料的价格。

表单按预期工作但我很想知道。我写了一个if-else语句连接到按下OK按钮,需要按下该按钮才能向按钮声明值。

我用以下代码完成了这个。

private void btnValidate_Click(object sender, EventArgs e)
    {
        if (btnDrank1.Text == "Drank1")
        {
            btnDrank1.Text = txtNaam.Text + "\n" + txtInhoud.Text + "cl";
            drank[0].Naam = txtNaam.Text;
            drank[0].Inhoud = txtInhoud.Text;
            drank[0].Prijs = Convert.ToDouble(txtPrijs.Text);
        }
        else
        {

            if (btnDrank2.Text == "Drank2")
            {
                btnDrank2.Text = txtNaam.Text + "\n" + txtInhoud.Text + "cl";
                drank[1].Naam = txtNaam.Text;
                drank[1].Inhoud = txtInhoud.Text;
                drank[1].Prijs = Convert.ToDouble(txtPrijs.Text);
            }
            else
            {
                if (btnDrank3.Text == "Drank3")
                {
                    btnDrank3.Text = txtNaam.Text + "\n" + txtInhoud.Text + "cl";
                    drank[2].Naam = txtNaam.Text;
                    drank[2].Inhoud = txtInhoud.Text;
                    drank[2].Prijs = Convert.ToDouble(txtPrijs.Text);
                }
                else
                {
                    if (btnDrank4.Text == "Drank4")
                    {
                        btnDrank4.Text = txtNaam.Text + "\n" + txtInhoud.Text + "cl";
                        drank[3].Naam = txtNaam.Text;
                        drank[3].Inhoud = txtInhoud.Text;
                        drank[3].Prijs = Convert.ToDouble(txtPrijs.Text);
                    }
                    else
                    {
                        if (btnDrank5.Text == "Drank5")
                        {
                            btnDrank5.Text = txtNaam.Text + "\n" + txtInhoud.Text + "cl";
                            drank[4].Naam = txtNaam.Text;
                            drank[4].Inhoud = txtInhoud.Text;
                            drank[4].Prijs = Convert.ToDouble(txtPrijs.Text);

                        }
                        else
                        {
                            if (btnDrank6.Text == "Drank6")
                            {
                                btnDrank6.Text = txtNaam.Text + "\n" + txtInhoud.Text + "cl";
                                drank[5].Naam = txtNaam.Text;
                                drank[5].Inhoud = txtInhoud.Text;
                                drank[5].Prijs = Convert.ToDouble(txtPrijs.Text);
                            }
                            else
                            {
                                MessageBox.Show("6 dranken is genoeg!", "My Application",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
                            }

我想知道是否有办法减少代码量并仍然得到相同的结果。我想的可能是一个foreach循环,但是无法弄清楚如何用自定义类编写一个。

干杯

2 个答案:

答案 0 :(得分:3)

你想要的是一个switch语句。

http://www.dotnetperls.com/string-switch

最终会看起来像这样:

switch (btnDrank2.Text)
{
    case "Drank2":
        btnDrank2.Text = txtNaam.Text + "\n" + txtInhoud.Text + "cl";
        drank[1].Naam = txtNaam.Text;
        drank[1].Inhoud = txtInhoud.Text;
        drank[1].Prijs = Convert.ToDouble(txtPrijs.Text);
    break;

    case "Drank3":
        btnDrank3.Text = txtNaam.Text + "\n" + txtInhoud.Text + "cl";
        drank[2].Naam = txtNaam.Text;
        drank[2].Inhoud = txtInhoud.Text;
        drank[2].Prijs = Convert.ToDouble(txtPrijs.Text);
    break;
}

等。代码可能有错误,因为我无法访问c#编译器。

答案 1 :(得分:0)

使用switch语句。在你的情况下代码将是那样的

private void btnValidate_Click(object sender, EventArgs e)
{
     string text = btnDrank4.Text;
     switch(text)
     {
           case "Drank1":
              btnDrank1.Text = txtNaam.Text + "\n" + txtInhoud.Text + "cl";
              drank[0].Naam = txtNaam.Text;
              drank[0].Inhoud = txtInhoud.Text;
              drank[0].Prijs = Convert.ToDouble(txtPrijs.Text);
           break;
           case "Drank2":
           // your code here
           break;

           // here the other cases

           default ""
           // here everything is not the previous values
           // I suppose these lines

           MessageBox.Show("6 dranken is genoeg!", "My Application",
           MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
           break;
     }
}