使用 switch 时如何避免错误 CS0128(局部变量已在此范围内定义)?
How to avoid error CS0128 (A local variable is already defined in this scope) when using switch?
我正在学习 c#,很抱歉提出这个愚蠢的问题。这是我的代码:
Random prekey = new Random();
string[] firstname = {"Александр", "Михаил", "Иван", "Максим", "Артем", "Даниил", "Дмитрий", "Кирилл", "Андрей", "Егор"};
string[] secondname = { "Александов", "Михайлов", "Иванов", "Максимов", "Артемов", "Даниилов", "Дмитров", "Кириллов", "Андреев", "Егоров" };
string fullname = firstname[prekey.Next(0, 10)] + " " + secondname[prekey.Next(0, 10)];
int a = prekey.Next(0, 3);
//string introduce;
switch (a)
{
case 0:
string introduce = firstname[prekey.Next(0, 10)];
break;
case 1:
string introduce = secondname[prekey.Next(0, 10)];
break;
case 2:
string introduce = fullname;
break;
}
如您所见,我的计划是让“introduce”随机成为“firstname”或“secondname”或两者兼而有之。但我遇到错误“已在此范围内定义名为 'introduce' 的局部变量”。我搜索并发现了这个问题:C# : error using if/switch : "Local variable already defined in this scope" 但答案对我没有帮助。例如,我试图在 switch 之前声明一个变量,但没有任何改变。所以我只是删除了该行作为评论。有一天我会尝试使用“if”,但现在我想使用 switch。我之前把我的计算器贴在这里,又来了:
static void Main(string[] args)
{
void MyMet(double? Result = null)
{
string[] calc = Console.ReadLine().Split(' ');
double a = Result ?? double.Parse(calc[0]);
char b = char.Parse(calc[1]);
double c = double.Parse(calc[2]);
switch (b)
{
case '*':
Result = a * c;
break;
case '+':
Result = a + c;
break;
case '-':
Result = a - c;
break;
case '/':
Result = a / c;
break;
}
Console.Write(Result);
MyMet(Result);
}
MyMet();
}
在这种情况下,一切正常,但这里变量声明时带有问号(老实说,我不知道它们是如何工作的,这部分只是复制过来的),我试图在当前版本中重新创建它案例,但显然 C# 不想将字符串视为双精度,所以他只是写了“C# 7.3 中不提供可空引用类型。请使用 8.0 或更高版本的语言。”我可以继续使用switch而不是切换到另一个版本来解决这个问题吗?
您只需要在变量使用前声明一次。
当您分配变量(而不是声明它)时,您没有在变量名称的左侧指定类型。
string introduce;
switch (a)
{
case 0:
introduce = firstname[prekey.Next(0, 10)];
break;
case 1:
introduce = secondname[prekey.Next(0, 10)];
break;
case 2:
introduce = fullname;
break;
}
我正在学习 c#,很抱歉提出这个愚蠢的问题。这是我的代码:
Random prekey = new Random();
string[] firstname = {"Александр", "Михаил", "Иван", "Максим", "Артем", "Даниил", "Дмитрий", "Кирилл", "Андрей", "Егор"};
string[] secondname = { "Александов", "Михайлов", "Иванов", "Максимов", "Артемов", "Даниилов", "Дмитров", "Кириллов", "Андреев", "Егоров" };
string fullname = firstname[prekey.Next(0, 10)] + " " + secondname[prekey.Next(0, 10)];
int a = prekey.Next(0, 3);
//string introduce;
switch (a)
{
case 0:
string introduce = firstname[prekey.Next(0, 10)];
break;
case 1:
string introduce = secondname[prekey.Next(0, 10)];
break;
case 2:
string introduce = fullname;
break;
}
如您所见,我的计划是让“introduce”随机成为“firstname”或“secondname”或两者兼而有之。但我遇到错误“已在此范围内定义名为 'introduce' 的局部变量”。我搜索并发现了这个问题:C# : error using if/switch : "Local variable already defined in this scope" 但答案对我没有帮助。例如,我试图在 switch 之前声明一个变量,但没有任何改变。所以我只是删除了该行作为评论。有一天我会尝试使用“if”,但现在我想使用 switch。我之前把我的计算器贴在这里,又来了:
static void Main(string[] args)
{
void MyMet(double? Result = null)
{
string[] calc = Console.ReadLine().Split(' ');
double a = Result ?? double.Parse(calc[0]);
char b = char.Parse(calc[1]);
double c = double.Parse(calc[2]);
switch (b)
{
case '*':
Result = a * c;
break;
case '+':
Result = a + c;
break;
case '-':
Result = a - c;
break;
case '/':
Result = a / c;
break;
}
Console.Write(Result);
MyMet(Result);
}
MyMet();
}
在这种情况下,一切正常,但这里变量声明时带有问号(老实说,我不知道它们是如何工作的,这部分只是复制过来的),我试图在当前版本中重新创建它案例,但显然 C# 不想将字符串视为双精度,所以他只是写了“C# 7.3 中不提供可空引用类型。请使用 8.0 或更高版本的语言。”我可以继续使用switch而不是切换到另一个版本来解决这个问题吗?
您只需要在变量使用前声明一次。
当您分配变量(而不是声明它)时,您没有在变量名称的左侧指定类型。
string introduce;
switch (a)
{
case 0:
introduce = firstname[prekey.Next(0, 10)];
break;
case 1:
introduce = secondname[prekey.Next(0, 10)];
break;
case 2:
introduce = fullname;
break;
}