我正在尝试创建一个将Celsius转换为Fahrenheit的表单,反之亦然,但我遇到了转换按钮代码的错误。我得到的问题是变量convertedTemperature保留为空,因此如果验证失败,则消息将通过输出标签(lblConvertedTemperature)显示。但由于这是空白我得到了使用未分配的变量错误。我的问题是如何重写处理部分以避免此错误。
Double inputTemperature;// the variable that will store txtTemperatureInput for calculation
Double convertedTemperature;// the variable that will store the converted temperature
/*********************************
* INPUT *
* *******************************/
// when the user inputs a value and clicks calculate, the input must first be validated
if (Double.TryParse(txtTemperatureInput.Text, out inputTemperature) == false)
{
lblConvertedTemperature.Text = "Temperature must be a numeric value.";// message displayed in
//output label telling user their input was not accepted because it was not numeric
txtTemperatureInput.Focus();// sets the focus back onto the temperature textbox for a new entry
}
else
{
/*******************************
* PROCESSING *
*******************************/
if (optConvertToCelsius.Checked == true)// if the convert to celsius radio button is selected
// this statement will run
{
convertedTemperature = (inputTemperature - 32)*5 / 9;// the formula for converting
//Fahrenheit to Celsius
}
else if (optConvertToFahrenheit.Checked == true)// convert to fahrenheit was selected,
//meaning the convert to fahrenheit radio button was selected, so this statement will run
{
convertedTemperature = (inputTemperature * 9) / 5 + 32; ;// the formula for converting Celsius to
//Fahrenheit
}//end concatonated if
}//end if
/******************************
*OUTPUT *
******************************/
lblConvertedTemperature.Text = Math.Round(convertedTemperature, 4).ToString();// sets the converted temperature
// label to the value of convertedTemperature
}
}
}
答案 0 :(得分:4)
我的问题是如何重写处理部分以避免此错误。
嗯,编译器关注的有两种情况:
lblConvertedTemperature.Text
......所以只有在您完成后才能返回。 (然后你不需要一个else
条款,这意味着你将有更少的嵌套 - 总是很好的可读性。)optConvertToCelsius
和optConvertToFahrenheit
。这是编译器认为的情况,因为您有两个独立的条件,您需要检查。当然,你可能知道它永远不会发生。对于后者,我建议删除第二个条件:
if (optConvertToCelsius.Checked)
{
...
}
else
{
...
}
请注意,我已经从第一个条件中移除了== true
,这只是一种风格问题。
现在编译器会知道如果你到达这一点,那么将执行这两个块中的一个。由于两个块都分配给convertedTemperature
,因此该变量将在该代码的末尾明确赋值。
编辑:只是澄清一下,如果你有:
if (someCondition)
{
...
}
else if (someOtherCondition)
{
...
}
编译器将不假设将执行其中一个块,无论条件是什么。即使你知道确切的一个条件是真的,编译器也会遵循其相对简单的规则。
答案 1 :(得分:0)
你正在寻找范围。简单地移动
/******************************
*OUTPUT *
******************************/
lblConvertedTemperature.Text = Math.Round(convertedTemperature, 4).ToString();// sets the converted temperature
// label to the value of convertedTemperature
到“处理”范围。