使用 2D 数组变量的开关语句中的 C# 错误

本文关键字:错误 语句 开关 数组 变量 使用 2D | 更新日期: 2023-09-27 18:37:06

如果在switch语句中为(数组)变量赋值时遇到问题。

我有一个使用"Temp"变量(如myArrayTemp1和myArrayTemp2)的解决方案。但是我想知道为什么我不能使用以下代码。

我不确定这是否与变量的范围有关......所以这是我的代码:

    int x;
    x=1;

        string[,] myArray = new string[2, 2]; 

        switch (x)
        {
            case 1:
                string[,] myArrayTemp1 = { { "1", "1" }, { "1", "1" } };  //is OK
                myArray = myArrayTemp1;                                   //is OK
                myArray =  { { "1", "1" }, { "1", "1" } };                //error
                break;
            case 2:
                string[,] myArrayTemp2 = { { "2", "2" }, { "2", "2" } }; //is OK
                myArray = myArrayTemp2;                                  //is OK
                myArray =  { { "2", "2" }, { "2", "2" } };                //error
                break;
        }
MessageBox.Show ("myArray:" + myArray[0,0]);

我想摆脱 myArrayTemp1 和 myArrayTemp2,并在案例块中为 myArray 赋值。我需要使用 myArray = { { "1", "1" }, { "1", "1" } }; 符号而不是 myArray[x,y] = "1"

谢谢

使用 2D 数组变量的开关语句中的 C# 错误

你只需要创建一个新数组:

string[,] myArray = new string[2, 2];
...
myArray =  new string[2,2] { { "1", "1" }, { "1", "1" } };

您最近问了一个类似的问题: C# : 使用 if/switch 时出错:"局部变量已在此范围内定义"

我以为现在就清楚了。

如果不能在声明的同一行中初始化集合初始值设定项语法(一行

),则不能使用集合初始值设定项语法(一行)。

但逻辑似乎是你根本不需要开关。那么为什么不呢:

string val = x.ToString();
string[,] myArray = { {val, val}, {val, val} };