我的程序涉及一个二维板:Square[width,height]
。每个Square都包含一些碎片。
在表示层中,我只想显示每个Square中的Pieces集合,并用其字符串Name表示每个Piece。即string[][width,height]
。
声明string[][,]
编译没有问题,但是我无法初始化变量:
string[][,] multiArrayOfArrays; //No problemo
multiArrayOfArrays = new string[][8,8]; //Generates errors
第二行生成以下错误:
CS1586 Array creation must have array size or array initializer
CS0178 Invalid rank specifier: expected ',' or ']' ModChess
CS0178 Invalid rank specifier: expected ',' or ']' ModChess
我目前正在使用List<string>[,]
作为解决方法,但是错误困扰了我。为什么我可以成功声明string[][,]
但不初始化它?
注意:使用VS Community 16.0.4,C#7.3。
答案 0 :(得分:2)
string [] [,] multiArrayOfArrays; //没问题
这里您只声明特定类型的变量。
multiArrayOfArrays =新字符串[] [8,8]; //产生错误
在这里,您实际上创建了特定类型的新对象。它会产生错误,因为这对于多维数组初始化是无效的语法。
您需要为第一个维度[]
指定大小,然后使用string[,]
初始化该数组的每个元素。
将其视为数组数组:
string[][,] multiArrayOfArrays; //No problemo
multiArrayOfArrays = new string[5][,];//create 5 elements of string[,] array
for (int i = 0; i < multiArrayOfArrays.Length; ++i)
{
multiArrayOfArrays[i] = new string[8,8];//actually fill elements with string[8,8]
}
或
string[][,] multiArrayOfArrays; //No problemo
multiArrayOfArrays = new string[][,]
{
new string[8,8],
new string[8,8],
new string[8,8],
};
答案 1 :(得分:1)
可能您想要一个string[,][] a
。
string[,][] a = new string[3, 4][];
a[0, 0] = new string[10];
a[0, 1] = new string[4];
a[1, 0] = new string[6];
string s = a[0, 0][2];
您有锯齿状数组的特殊情况,其中第一个数组是二维的。它包含大小不同的一维数组作为元素。
数组括号的顺序似乎是错误的,因为元素类型通常在括号的左侧。但是,如果您考虑要如何访问元素,那么这很有意义。首先,您要指定二维板的2个坐标,然后指定个件集合的单个索引。
根据Jagged Arrays (C# Programming Guide),int[][,] jaggedArray4 = new int[3][,]
“ ...是对一维锯齿状数组的声明和初始化,该数组包含三个大小不同的二维数组元素。 em>