0

我收到一个错误,代码中 if 语句中的变量 intAge 下方有一条红线。它说变量是本地的,但是当它在代码开头声明时,它怎么可能是本地的呢?它与 Try/Catch 部分有关吗?我的代码看起来像这样的原因只是因为我必须在代码中使用 Try/Catch 来完成此任务。Preciate一些建议以类似和正确的方式解决这个问题?谢谢!

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!";
        }
4

5 回答 5

3

只需初始化intAge:

int intAge = 0;

您正在错误使用未分配的局部变量

由于您在 try 块中分配值,因此编译器无法确定分配是否会发生(以防int.Parse(age)引发异常),然后在您的检查中 if(intAge<1)您收到错误,因为您使用的是变量之前没有分配。

确定分配 - MSDN

在函数成员的可执行代码中的给定位置,如果编译器可以通过静态流分析证明该变量已自动初始化或已成为至少一次赋值的目标,则称该变量已被确定赋值。

于 2012-07-06T09:00:26.607 回答
3

如果 int.Parse 失败,则不会初始化 intAge 变量。您可以在 dedecration 时对其进行初始化

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!";  
        }
    }
于 2012-07-06T09:01:15.337 回答
2

它是本地的,因为它是在本地范围内声明的。您的代码可能结构更好,例如:

int intAge;

if (!int.TryParse(age, out intAge))
{
    MessageBox.Show(...
}
else
{
    if (intAge < 1)
        {
            inputOk = false;
            errorMessage = "Please enter 1 or higher!";
        }
}

使用上面的代码,您将显示两个错误,一个是非数字错误,一个是小于 1 的错误。编译器最初的抱怨是因为不能保证您的整数被初始化。

于 2012-07-06T09:01:02.710 回答
1

编译器抱怨intAge第一次使用时局部变量可能没有被初始化。int.Parse(age)抛出异常时可能会发生这种情况。要纠正这个问题,只需初始化intAge为一些适当的值。

于 2012-07-06T09:03:35.823 回答
0

问题是年龄没有初始化初始化为0,试试看。它必须工作

于 2012-07-06T09:16:45.670 回答