无法声明局部变量名称'choice',因为它会给'choice'赋予不同的含义

时间:2013-02-08 20:56:21

标签: c# if-statement while-loop do-while

对不起,我对编程世界完全陌生。我正在创建一个控制台应用程序,基本上可以输入您是否要将摄氏温度转换为华氏温度,反之亦然。

我遇到的问题是:

  

"错误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();
        }
    }
}

5 个答案:

答案 0 :(得分:6)

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

应该阅读

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

通过第二次放置int,您将在{}内声明另一个名为“choice”的变量。这个定义与外面的定义相冲突。

答案 1 :(得分:1)

全部在错误消息中,您已在同一范围内两次声明选择变量。

当您从控制台输入中读取值时,您无需重新声明您只需设置它的变量。详细说明:

int choice; // declare variable

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

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

int choice = ...

使用

choice = ...

答案 2 :(得分:1)

  

我遇到的问题是:

     

“名为'choice'的局部变量不能在此范围内声明,因为它会给'choice'赋予不同的含义,'choice'已在'parent或current'范围内用于表示其他内容。”

     

我试着看其他例子

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

  

无法声明名为“choice”的局部变量

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

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

此处使用int声明变量,int是其类型。删除int会使该行成为assignment,这正是您所需要的。 Convert.ToInt32(Console.ReadLine())的结果被赋予(=)choice - 变量。您只能在声明变量后指定变量,但您已在代码中更早地完成了变量。所以错误说:

  

因为它会给'选择'赋予不同的含义,'选择'已在'父或当前'范围内用于表示其他内容

如果你查看代码,你会发现在parent scope(在static void Main()中)声明了一个具有相同名称的变量:

int choice;

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

答案 3 :(得分:0)

尝试从您的循环范围中选择变量声明。像这样:

   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();
}

}

答案 4 :(得分:0)

您不能拥有与另一个本地变量同名的局部变量。 可以具有一个局部变量,其名称与较大的非本地范围(例如,类成员)的变量同名,但在这种情况下,局部变量会隐藏较大范围的变量。

您要做的是从第int开始choice。你不需要重新声明它,你只想分配它。

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