我有一个声称为:
的锯齿状数组char[][] m = new char[10][];
稍后填充。
System.Text.StringBuilder s = new System.Text.StringBuilder(c);
for (int x = 0; x < 10; x++)
s.Append('=');
for (int x = 0; x < 10; x++) m[x] = s.ToString().ToCharArray();
如果我执行以下操作,我会在第二个维度上出错:
Console.WriteLine(String.Format("width={0}", m.GetLength(0)));
Console.WriteLine(String.Format("height={0}", m.GetLength(1))); <---- ERROR HERE
有什么想法吗?
答案 0 :(得分:2)
您正在混淆方阵和锯齿状阵列。锯齿状数组也称为数组数组,如下所示:
char[][] a = new char[10][];
锯齿状数组中的每个元素本身就是一个数组,它的长度可以与其他任何元素完全不同:
a[0] = new char[1];
a[1] = new char[100];
a[2] = new char[5];
...
a[9] = new char[999999];
如您所见,GetLength(1)
在锯齿状阵列上毫无意义。什么会回来?要获得第二级数组的长度,您必须遍历它们并调用它们的各种Length
属性:
for (int i = 0; i < a.Length; i++)
{
int length = a[i].Length;
}
出于您的目的,您可能希望使用方阵(也称为2D阵列):
char[,] a = new char[10,10];
与锯齿状数组不同,方形数组的第二维保证长度相同。这意味着GetLength(1)
可以放心地返回值。
答案 1 :(得分:1)
Array.GetLength(int dimension)
仅适用于多维数组。你的数组'm'不是多维,但是锯齿状的。
这意味着它是一个元素类型为char[]
的数组。
因此,您只有一个维度(长度为10
)且GetLength(1)
会引发错误。
您可以从m[i].Length
到0
获取9
i。但只有初始化元素:
m[0] = new char[10];
int l = m[0].Length; // 10