C#使用未分配的局部变量是什么原因

时间:2017-03-11 15:10:30

标签: c# c#-4.0 c#-3.0 c#-2.0 local-variables

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            int x, y;
            //    Console.WriteLine("Enter the first number is" + x + "enter Secnd number is" + y);

            try
            {
                Console.WriteLine("Enter the first number");
                x = int.Parse(Console.ReadLine()); 
            }
            catch(Exception e)
            {
                Console.WriteLine("invalid input " +e);
            }

            try
            {
                Console.WriteLine("Enter the Second number");
                y = int.Parse(Console.ReadLine());                  
            }
            catch(Exception e)
            {
                Console.WriteLine("ivalid input"+e);
            }

            Console.WriteLine("Enter the first number is: x =" +x + "enter Secnd number is: y=" + y);
            Console.ReadLine();
        }
    }
}

4 个答案:

答案 0 :(得分:2)

如果int.Parse()抛出异常,代码会继续并尝试使用更远的变量。要解决此问题,您可以在return;块的末尾添加catch语句。不是最理想的解决方案,但它会修复错误。您可以在声明它们时分配xy初始值(0可能是?)。

答案 1 :(得分:0)

使用0初始化你的变量..或者将整个代码放在一个试用阻塞块中

答案 2 :(得分:0)

正如其他人所指出的那样,无论try / catch块中的赋值是否有效,您都会尝试在末尾打印xy。您可以尝试继续提示用户,直到他们输入有效输入。

此外,格式字符串或字符串插值最后可能会更好。

答案 3 :(得分:0)

如果int.Parse()语句都抛出异常,则xy尚未分配值。异常是由最终WriteLine()中调用未分配的变量引起的。

我建议使用这样的int.TryParse()方法,因为它不会使值未初始化。不妨利用一些新的C#语法!

        Console.Write("Enter first number: ");
        string firstResponse = Console.ReadLine();
        if (!int.TryParse(firstResponse, out int x)) 
        {
            Console.WriteLine($"Invalid input: {firstResponse}");
        }
        // If TryParse fails will write 0
        Console.WriteLine(x);

或者这也适用!

       int x;
       if (!int.TryParse(firstResponse, out x))