C# 用字符串数组初始化二维字符数组

C# 用字符串数组初始化二维字符数组,c#,string,multidimensional-array,char,initialization,C#,String,Multidimensional Array,Char,Initialization,我有一个语法问题:下面的行是可以的: char[,] board = new char[2, 2] { { '1', '2' }, { '3', '4' } }; 但如果我有一个字符串数组并尝试以下操作: char[,] board = new char[2, 2] { "12".ToCharArray(), "34".ToCharArray() }; 它给了我一个错误:CS0846需要一个嵌套数组初始值设定项。 正确的语法应该是什么,因为我有长字符串,并且在第一个示例中没有使用char语法

我有一个语法问题:下面的行是可以的:

char[,] board = new char[2, 2] { { '1', '2' }, { '3', '4' } };
但如果我有一个字符串数组并尝试以下操作:

char[,] board = new char[2, 2] { "12".ToCharArray(), "34".ToCharArray() };
它给了我一个错误:CS0846需要一个嵌套数组初始值设定项。 正确的语法应该是什么,因为我有长字符串,并且在第一个示例中没有使用char语法?

C语言有特殊的语法来识别多维数组。虽然语法看起来与锯齿数组的初始化非常相似(例如类似于
char[][]
),但不能使用该语法从其他对象执行初始化

在您的示例中,如果您正在初始化交错数组(或者更确切地说,类似于它的东西:
char[]]board2=new char[][]{“12.tocharray(),“34.tocharray()};
),则字符串文本的语法将起作用,但对于变量声明上的多维数组的初始化,您必须使用嵌套数组初始值设定项,因为您没有像使用锯齿数组那样初始化一维数组中的单个对象

编译器需要能够在编译时为单个对象生成所有初始化,而当您尝试使用运行时使用
tocharray()
方法获得的数组初始化二维数组时,编译器无法做到这一点

所以,你必须用艰难的方式去做。例如:

string[] rows = { "12", "34" };

for (int i = 0; i < rows.Length; i++)
    for (int j = 0; j < rows[i].Length; j++)
    {
        board[i, j] = rows[i][j];
    }
private static void InitBoard(char[,] board, params string[] rows)
{
    for (int i = 0; i < rows.Length; i++)
        for (int j = 0; j < rows[i].Length; j++)
        {
            board[i, j] = rows[i][j];
        }
}

试试这个:char[,]board={{{'1','2'},{'3','4'};
char[,] board = new char[2,2];

InitBoard(board, "12", "34");