今天我没有别的事要做,所以我决定尝试创建一个简单的单位转换器。到目前为止,它运行良好,但由于我使用了如此多的'if'语句,因此它耗时太长。我已经在Visual Studio中搜索了“网络转换器”的示例,但唯一发现的是VS Basic中使用在线转换器进行计算的货币转换器。那么有没有更快的方法来创建单位转换器?单位转换器C#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItem == listBox2.SelectedItem)
{
txtAns.Text = txtFirstUnit.Text;
}
if (listBox1.SelectedItem == "Feet" && listBox2.SelectedItem == "Inches")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text) * 12).ToString();
}
if (listBox1.SelectedItem == "Inches" && listBox2.SelectedItem == "Feet")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text)/12).ToString();
}
if (listBox1.SelectedItem == "Yard" && listBox2.SelectedItem == "Feet")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text) * 3).ToString();
}
if (listBox1.SelectedItem == "Feet" && listBox2.SelectedItem == "Yard")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text)/3).ToString();
}
if (listBox1.SelectedItem == "Yard" && listBox2.SelectedItem == "Inches")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text) * 36).ToString();
}
if (listBox1.SelectedItem == "Inches" && listBox2.SelectedItem == "Yard")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text)/36).ToString();
}
if (listBox1.SelectedItem == "Mile" && listBox2.SelectedItem == "Inches")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text) * 63360).ToString();
}
if (listBox1.SelectedItem == "Inches" && listBox2.SelectedItem == "Mile")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text)/63360).ToString();
}
if (listBox1.SelectedItem == "Mile" && listBox2.SelectedItem == "Feet")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text) * 5280).ToString();
}
if (listBox1.SelectedItem == "Feet" && listBox2.SelectedItem == "Mile")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text)/5280).ToString();
}
if (listBox1.SelectedItem == "Mile" && listBox2.SelectedItem == "Yard")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text) * 1760).ToString();
}
if (listBox1.SelectedItem == "Yard" && listBox2.SelectedItem == "Mile")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text)/1760).ToString();
}
if (listBox1.SelectedItem == "Inches" && listBox2.SelectedItem == "Meters")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text)/39.370).ToString();
}
if (listBox1.SelectedItem == "Meters" && listBox2.SelectedItem == "Inches")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text) * 39.370).ToString();
}
if (listBox1.SelectedItem == "Meters" && listBox2.SelectedItem == "Feet")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text) * 3.2808).ToString();
}
if (listBox1.SelectedItem == "Feet" && listBox2.SelectedItem == "Meters")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text)/3.2808).ToString();
}
if (listBox1.SelectedItem == "Meters" && listBox2.SelectedItem == "Yard")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text) * 1.0936).ToString();
}
if (listBox1.SelectedItem == "Yard" && listBox2.SelectedItem == "Meters")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text)/1.0936).ToString();
}
if (listBox1.SelectedItem == "Meters" && listBox2.SelectedItem == "Miles")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text) * 0.00062137).ToString();
}
if (listBox1.SelectedItem == "Miles" && listBox2.SelectedItem == "Meters")
{
txtAns.Text = (double.Parse(txtFirstUnit.Text)/0.00062137).ToString();
}
}
}
“有没有更快的方法来创建单位转换器?” - 是的,这就是所谓的查找表... –
我知道这不是一个生产系统,或者你必须向公众发布的东西,但你一定要检查你的输入,以确保它们是理智的。 –
[如何在C#中为度量单位创建通用转换器?](http://stackoverflow.com/questions/7851448/how-do-i-create-a-generic-converter-for-units -of-measurement-in-c) –