C# - 我如何缩短代码?

时间:2015-08-24 16:01:17

标签: c#

此程序可转换用户输入的英寸,英尺或码,并将其转换为英寸,英尺或码。它以100%的效率工作,从我的测试来看,它没有错误。如果你发现任何我道歉。

我的问题是,因为对于这么简单的事情来说这是一段非常冗长的代码。有没有更简单的方法来写这个?我的一个朋友正在研究同样的问题而且他已经死定了,有一种更简单的方法。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    // Declared inches, feet, and yards a global variable.
    public double feet;
    public double inches;
    public double yards;

    private void convertButton_Click(object sender, EventArgs e)
    {
        // Declared a variable for an the originlalDistanceInput
        double distanceInput;

        // Checks to make sure that the user didn't input a letter. If so return an error message.
        if (!double.TryParse(originalDistanceInput.Text, out distanceInput) || distanceInput < 0)
        {
            MessageBox.Show("Please enter an a number greater than 0 and not a letter.", "Notice");
            originalDistanceInput.Clear();
        }

        else
        {
            if (fromList.SelectedIndex == -1)
            {
                MessageBox.Show("Please select a conversion input.");
            }

            else if (toList.SelectedIndex == -1)
            {
                MessageBox.Show("Please select a conversion output.");
            }

            // Checks the listbox to make sure that the
            else if (fromList.SelectedIndex != -1)
            {
                string from = fromList.SelectedItem.ToString();

                switch (from)
                {
                    case "Inches":
                        if (toList.SelectedIndex == 0)
                        {
                            MessageBox.Show("You did not make a conversion!", "Notice");
                            originalDistanceInput.Clear();
                        }

                        else if (toList.SelectedIndex == 1)
                        {
                            feet = distanceInput / 12;
                            convertedOutput.Text = feet.ToString("##.#### 'FT'");
                        }

                        else if (toList.SelectedIndex == 2)
                        {
                            yards = distanceInput / 36;
                            convertedOutput.Text = yards.ToString("##.#### 'YD'");
                        }
                        break;



                    case "Feet":
                        if (toList.SelectedIndex == 0)
                        {
                            inches = distanceInput * 12;
                            convertedOutput.Text = inches.ToString("##.#### 'IN'");
                        }

                        else if (toList.SelectedIndex == 1)
                        {
                            MessageBox.Show("You did not make a converstion!", "Notice");
                            originalDistanceInput.Clear();
                        }

                        else if (toList.SelectedIndex == 2)
                        {
                            yards = distanceInput / 3;
                            convertedOutput.Text = yards.ToString("##.#### 'YD'");
                        }
                        break;

                    case "Yards":
                        if (toList.SelectedIndex == 0)
                        {
                            inches = distanceInput * 36;
                            convertedOutput.Text = inches.ToString("##.#### 'IN'");
                        }

                        else if (toList.SelectedIndex == 1)
                        {
                            feet = distanceInput * 3;
                            convertedOutput.Text = feet.ToString("##.#### 'FT'");
                        }

                        else if (toList.SelectedIndex == 2)
                        {
                            MessageBox.Show("You did not make a converstion!", "Notice");
                            originalDistanceInput.Clear();
                        }
                        break;
                }
            }
        }  
    }
}

1 个答案:

答案 0 :(得分:2)

如果我是你,我会将所有内容转换为标准单位,然后将其转换回输出单位。这将使它最终具有更大的可扩展性。可以反向使用相同的转换因子来获得输出单元。事实上,如果你能做到这一点,那就制作一个具有单位名称的对象,转换为标准参考(我会使用公制单位,因为它们是最标准的),以及你需要的任何其他东西。例如,你可以创建一个类单元(Proto代码,我还不是C#guru ......)

class Unit {
   private float convertToStandard;
   private string unitName;

   Unit(float conversionFactor, string unitName) {
      convertToStandard=coversionFactor;
      this.unitName=unitName;
   }
}

然后你可以做很多事情,比如添加一个隐蔽函数来将它改成不同的单位,接受一个单位函数。这个单元功能虽然可以添加几行代码,但整体上会更加清晰,并且允许您添加新单元,只需要几个额外的调用。因此,添加新单位变得非常简单:

new Unit (1,"meter");
new Unit (0.3048,"feet");

添加转换功能,它更容易。 convert函数可能如下所示(在Unit类中):

public float convertToThisUnit(Unit from) {
    return from.convertToStandard/this.convertToStandard; 
}

你可以继续,但最重要的是,单位转换应该采取某种面向对象的方法,这将使它更简单,虽然它可能添加几行代码用于这样一个简短的例子,你在这里。