使用 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;
}