我正在为一个大学项目制作里程计算器。如果用户没有在文本框中输入任何内容,我想确保程序使用全局变量。示例:如果用户没有在costPerLitre框中输入任何内容,则使用globals.averageCostPerLitre
public static class globals
{
public const double averageCostPerLitre = 1.25;
public const double averageMilesPerGallon = 50.5;
public const int averageGallonsInTank = 14;
public const int highestSpeed = 70;
public const int lowestSpeed = 30;
}
private void button2_Click(object sender, EventArgs e)
{
double costPerLitre = Convert.ToDouble(textBox5.Text);
double milesPerGallon = Convert.ToDouble(textBox6.Text);
double routeMiles = Convert.ToInt32(textBox7.Text);
double numberOfGallons = Convert.ToInt32(textBox8.Text);
if (costPerLitre == 0)
{
costPerLitre = globals.averageCostPerLitre;
}
else if (milesPerGallon == 0)
{
milesPerGallon = globals.averageMilesPerGallon;
}
else if (numberOfGallons == 0)
{
numberOfGallons = globals.averageGallonsInTank;
}
else
{
// Do nothing
}
我的问题是,当代码运行时,没有任何输入,然后它就会停止并中断。我不知道如何解决这个问题。
完整代码:
https://i.stack.imgur.com/biY5d.png
像double costPerLitre = Convert.ToDouble(textBox5.Text)
一样,每一行都有错误,因为当文本为空时,无法将其转换为双精度!
所以你可以用修改每一行
double costPerLitre = string.IsNullOrEmpty(textBox5.Text)
? globals.averageCostPerLitre
: Convert.ToDouble(textBox5.Text);
除了Marco的答案外,我建议您使用double。TryParse是一种更好的做法,因为它不会在出错时抛出异常,并返回一个bool,指示是否可以进行转换。