局部变量和Try / Catch

时间:2012-07-06 08:58:27

标签: c#

我在代码中的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!";
        }

5 个答案:

答案 0 :(得分:3)

只需初始化intAge:

int intAge = 0;

您收到错误使用未分配的本地变量

由于您在try块中分配了值,因此编译器无法确定是否将执行赋值(如果int.Parse(age)抛出异常),然后在您的检查中{{1您收到错误是因为您使用的是之前未分配的变量。

Definite assignment - MSDN

  

在函数成员的可执行代码中的给定位置,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,并尝试。它必须工作