我有这个简单的代码。
int[][] array = {
new int[] {1,2,3},
new int[] {4,5,6},
};
int yLength = array.GetLength(1);
但最后一行抛出超出范围的异常。这是为什么?
在这种情况下,它不应该GetLength
返回3吗?或者GetLength仅适用于方阵? (T [,]数组)?
如果是这样,我如何使用for
循环遍历锯齿状数组?
答案 0 :(得分:4)
您正在创建一个数组数组,而不是一个n维数组。这些在C中是相同的,但在C#中则不然。这就是array.GetLength(1)
抛出异常的原因。
Array.Rank
MSDN page给出了一个语法示例和两种方式的比较:
int[] array1 = new int[10];
int[,] array2= new int[10,3];
int[][] array3 = new int[10][];
Console.WriteLine("{0}: {1} dimension(s)",
array1.ToString(), array1.Rank); // System.Int32[]: 1 dimension(s)
Console.WriteLine("{0}: {1} dimension(s)",
array2.ToString(), array2.Rank); // System.Int32[,]: 2 dimension(s)
Console.WriteLine("{0}: {1} dimension(s)",
array3.ToString(), array3.Rank); // System.Int32[][]: 1 dimension(s)
当数组实现IEnumerable
时,您只需使用foreach
:
foreach (var innerArray in array)
foreach (var elem in innerArray)
Console.WriteLine(elem);
或者在它们上面使用LINQ,请记住它是一个嵌套数组的数组。
答案 1 :(得分:3)
由于内部数组的大小可能不同,因此您无法使用array.GetLength(1)
,而是使用array[i].Length
来获取特定数组的长度。
for (int i = 0; i < array.GetLength(0); i++)
for (int j = 0; j < array[i].Length; j++)