【问题标题】:Alternative for If-elseIf-else 的替代方案
【发布时间】:2014-12-08 17:00:41
【问题描述】:

我是一个菜鸟程序员,上第一堂课 1 个月。现在我正在用 C# 制作一个 WINFORM 应用程序,该应用程序应该用于酒吧的某种收银机。

表格包括: - 6 个名为 Drank1 到 Drank6 的按钮 - 一个确定按钮 - 一个名为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 循环,但不太清楚如何用自定义类编写一个。

干杯

【问题讨论】:

  • else if ( condition ) { statements }
  • 您可以使用 else if 将所有这些链接在一起。
  • 如果可以,但换个开关会好很多。
  • 值得一提的是,所有这些代码都是重复的。如果您可以获得您选择的饮料的索引而不是文本(或只是解析 int),您可以将其减少到您在每个语句中重复的 4 行。

标签: c# if-statement foreach


【解决方案1】:

你想要的叫做 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# 编译器。

【讨论】:

    【解决方案2】:

    使用 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;
         }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 2016-05-30
      • 1970-01-01
      • 2017-01-19
      • 2013-09-16
      相关资源
      最近更新 更多