使用未分配的局部变量?

时间:2012-11-04 14:37:16

标签: c#

Visual Studio一直为Use of unassigned variableiValiNumber。谁能告诉我哪里出错了?

这是一个代码,要求用户继续输入整数并将其添加到用户想要停止。然后,整数的总和显示在控制台上。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AddFive
{
    class Program
    {
        static void Main(string[] args)
        {
           int iNumber;
           int iVal;
           int iTotal = 0;

            while (iVal > 0)
            {
                Console.WriteLine("Enter number " + iNumber);
                iVal = Convert.ToInt32(Console.ReadLine());
                iTotal = iTotal + iVal;
            }

            if (iNumber <= 0)
            {
                Console.WriteLine("Total = " + iTotal);
                iVal = Convert.ToInt32(Console.ReadLine());
                iTotal = iTotal + iVal;
            }

            Console.WriteLine("Total = " + iTotal);
            Console.WriteLine();
            Console.WriteLine("Press any key to close");
            Console.ReadKey();
        }
    }
}

6 个答案:

答案 0 :(得分:7)

为这些变量分配值。在使用它们之前,您需要为局部变量赋值

    int iNumber = 0;
    int iVal = 0;

当您撰写while (iVal > 0)时,iVal的值尚未设置

你只能使用instance / class变量,因为它们被初始化为默认值

public class Program
{
    int i; //this was not implicitly initialized to zero (0)

    public Program()
    {
        int j; //need to initialize this before use

        Console.Write(j);  //this throws "Use of unassigned variable" error
        Console.Write(i);  //this prints 0, the default value
    }
}

答案 1 :(得分:5)

Visual Studio是正确的,您正在尝试引用未初始化的变量。

试试这个:

 int iNumber = 0;
 int iVal = 0;

这样,您正在将变量初始化为初始值0。 原始问题出现在以下几行:

while (iVal > 0)if (iNumber <= 0)

在为变量赋值之前尝试访问变量。

答案 2 :(得分:3)

在C#中,你必须在使用它之前为它赋值。

e.g。

 int iNumber = 0;
 int iVal = 0;

答案 3 :(得分:3)

您需要初始化iNumberiVal。想想他们在当前代码中第一次通过while循环会有什么价值。

答案 4 :(得分:3)

您的iVal参数在while循环中未分配。初始化时,你需要给出一个值。

答案 5 :(得分:0)

问题如前所述,在您第一次使用它们(在while语句中)之前,您没有为iNumber或iVal赋值。在这种特殊情况下,它是良性的,并指定默认值改变了什么。错误虽然合适。历史上未分配的变量在允许使用未分配变量的语言中令人头疼。特别是在未将存储位置初始化为默认值的语言中。在这种情况下,C#会初始化为默认值,但它可能仍然导致很难找到错误。编译器足够智能,可以在达到特定的本地使用之前检查代码所采用的路径,如果你可以在没有分配值的情况下到达那里就会抱怨。这可以帮助复杂的代码,其中顺序读取代码会导致您认为已经分配了本地但实际上由于条件逻辑它不是