我在代码中的if语句中得到一个错误,变量intAge下面的红线。它说变量是本地的,但是当它在代码的开头被声明时它怎么可能是本地的?是否与Try / Catch部分有关?我的代码看起来像它的原因,只是因为我必须在代码中使用Try / Catch来执行此任务。提出一些建议,以类似和正确的方式解决这个问题?谢谢!
int intAge;
try
{
intAge = int.Parse(age);
}
catch (Exception)
{
MessageBox.Show("Enter an age in numbers!","Error!");
}
finally
{
}
// Check input
if (intAge < 1)
{
inputOk = false;
errorMessage = "Please enter 1 or higher!";
}
答案 0 :(得分:3)
只需初始化intAge:
int intAge = 0;
您收到错误使用未分配的本地变量。
由于您在try块中分配了值,因此编译器无法确定是否将执行赋值(如果int.Parse(age)
抛出异常),然后在您的检查中{{1您收到错误是因为您使用的是之前未分配的变量。
在函数成员的可执行代码中的给定位置,a 如果编译器可以证明,变量被认为是明确分配的, 通过静态流分析,该变量已自动进行 初始化或已成为至少一项任务的目标。
答案 1 :(得分:3)
如果int.Parse失败,则不会初始化intAge变量。 您可以在delecration
初始化它int intAge = 0;
您可以避免双重错误:
int intAge;
if (!int.TryParse(age, out intAge))
{
inputOk = false;
errorMessage = "Enter an age in numbers!";
}
else
{
// Check input
if (intAge < 1)
{
inputOk = false;
errorMessage = "Please enter 1 or higher!";
}
}
答案 2 :(得分:2)
它是本地的,因为它是在本地范围内声明的。您的代码可能更好地构建如下:
int intAge;
if (!int.TryParse(age, out intAge))
{
MessageBox.Show(...
}
else
{
if (intAge < 1)
{
inputOk = false;
errorMessage = "Please enter 1 or higher!";
}
}
使用上面的代码,您将显示两个错误,一个用于非数字,然后一个用于少于1.编译器的初始抱怨是因为您的整数不能保证初始化。
答案 3 :(得分:1)
编译器抱怨第一次使用时可能没有初始化局部变量intAge
。当int.Parse(age)
抛出异常时,可能会发生这种情况。要更正此问题,只需将intAge
初始化为适当的值。
答案 4 :(得分:0)
问题是年龄未初始化将其初始化为0,并尝试。它必须工作