本地变量名称';选择';不能声明,因为它将赋予';选择';
本文关键字:选择 因为 声明 变量名 不能 | 更新日期: 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());