本地变量名称';选择';不能声明,因为它将赋予';选择';

本文关键字:选择 因为 声明 变量名 不能 | 更新日期: 2023-09-27 17:58:29

对不起,我对编程界完全陌生。我正在创建一个控制台应用程序,它基本上接受您的输入,决定您是想将摄氏度转换为华氏度,还是想将华氏度转换为摄氏度。

我遇到的问题是:

"错误3不能在此中声明名为"choice"的局部变量范围,因为它将赋予"选择"不同的含义,即已经在"父或当前"范围中用于表示其他内容"

我试着看了其他的例子,但它们比我的大脑目前所能理解的要复杂得多。

namespace TemperatureApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int choice;
            do
            {
                Console.WriteLine("Hi! This is a temperatue app");
                Console.WriteLine("Press 1 for C to F or 2 for F to C");
                //take the user input
                int choice = Convert.ToInt32(Console.ReadLine());

                if (choice == 1)
                {
                    Console.WriteLine("Great, you chose C to F. Now enter the temp.");
                    int celcius = Convert.ToInt32(Console.ReadLine());
                    //next line use the formula and show answer
                }
                if (choice == 2)
                {
                    Console.WriteLine("Great, you chose F to C. Now enter the temp.");
                    int fahrenheit = Convert.ToInt32(Console.ReadLine());
                    //next line use the formula and show answer
                }
                else
                    Console.WriteLine("That is not the right choice.");
                    //In this way, keep asking the person for either 1 or two
            }
            while (choice != 1 || choice != 2);
            Console.ReadLine();
        }
    }
}

本地变量名称';选择';不能声明,因为它将赋予';选择';

int choice = Convert.ToInt32(Console.ReadLine());

应读取

choice = Convert.ToInt32(Console.ReadLine());

通过第二次放入int,您在{}中声明了另一个名为"choice"的变量。这个定义与外面的定义相冲突。

在错误消息中,您在同一范围内声明了两次选项变量。

当你从控制台输入中读取值时,你不需要重新声明变量,你只需要设置它

int choice; // declare variable
do
{
    int choice = ...; // re-declare variable
}

在第二行中,您想为变量分配一个值,而不是重新声明它,为此您只需要替换这一行:

int choice = ...

choice = ...

我遇到的问题是:

"不能在此作用域中声明名为"choice"的局部变量,因为它将赋予"choice"不同的含义,而"choice已经在"parent or current"作用域中用于表示其他内容"。

我试着看看的其他例子

你不应该看例子,而应该看错误和你的代码。C#编译器的消息非常用户友好,这一条也非常清楚。你只需要理解所使用的语言。

名为"choice"的局部变量不能声明为

您在do-循环:中声明了一个如下的变量:variable-type variable-name,它发生在错误的行上

int choice = Convert.ToInt32(Console.ReadLine());

这里使用int声明变量,int是其类型。删除int将使该行成为赋值,这正是您所需要的。Convert.ToInt32(Console.ReadLine())的结果被赋值(=)给choice-变量。您只能在声明变量之后分配它,但您在代码的前面已经这样做了。因此错误显示:

因为它将赋予"选择"不同的含义,"选择"已经在"父或当前"范围中用于表示其他

如果您在代码中查找,您会看到在父作用域(在static void Main()中)中声明了一个同名的变量:

int choice;

现在您应该知道,您只需要声明一次变量,而且这通常是在尽可能小的范围内完成的。在您的情况下,您可以简单地删除int choice = Convert.ToInt32(Console.ReadLine());之前的int,因为您还需要在do-循环之外访问choice

尝试将选择变量声明从循环范围中移除。像这样:

   int choice;
   do
    {
        Console.WriteLine("Hi! This is a temperatue app");
        Console.WriteLine("Press 1 for C to F or 2 for F to C");
        //take the user input
        choice = Convert.ToInt32(Console.ReadLine());

        if (choice == 1)
        {
            Console.WriteLine("Great, you chose C to F. Now enter the temp.");
            int celcius = Convert.ToInt32(Console.ReadLine());
            //next line use the formula and show answer
        }
        if (choice == 2)
        {
            Console.WriteLine("Great, you chose F to C. Now enter the temp.");
            int fahrenheit = Convert.ToInt32(Console.ReadLine());
            //next line use the formula and show answer
        }
        else
            Console.WriteLine("That is not the right choice.");
            //In this way, keep asking the person for either 1 or two
    }
    while (choice != 1 || choice != 2);
    Console.ReadLine();
}

}

不能有一个与另一个局部变量同名的局部变量。可以有一个与较大的非局部作用域(例如类成员)的变量同名的局部变量,但在这种情况下,局部变量会隐藏较大作用域的变量。

您要做的是将int从第二个choice上取下。你不需要重新申报,你只需要分配它。

choice = Convert.ToInt32(Console.ReadLine());