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

Win*_*don 0 c#

我有这个简单的代码。

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

        int yLength = array.GetLength(1);
Run Code Online (Sandbox Code Playgroud)

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

rkr*_*ahl 5

  • 您正在创建一个数组数组,而不是一个 n 维数组。这些在 C 中是相同的,但在 C# 中不是。这array.GetLength(1)就是抛出异常的原因。

    Array.RankMSDN页面给出了一个语法例子,这两个方面的比较:

     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)
    
    Run Code Online (Sandbox Code Playgroud)
  • 作为数组实现IEnumerable,您可以简单地使用foreach

     foreach (var innerArray in array)
       foreach (var elem in innerArray)
         Console.WriteLine(elem);
    
    Run Code Online (Sandbox Code Playgroud)

    或者对它们使用 LINQ,记住它是一个嵌套数组的数组。