array.GetLength抛出多维数组的范围异常

时间:2015-02-14 20:23:35

标签: c#

我有这个简单的代码。

        int[][] array = {
                    new int[] {1,2,3},
                    new int[] {4,5,6},
                  };

        int yLength = array.GetLength(1);

但最后一行抛出超出范围的异常。这是为什么? 在这种情况下,它不应该GetLength返回3吗?或者GetLength仅适用于方阵? (T [,]数组)?
如果是这样,我如何使用for循环遍历锯齿状数组?

2 个答案:

答案 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++)