ジャグ配列も1次元配列と同様for文・foreach文で列挙することができます。 ただし、foreach文でジャグ配列を列挙する場合は、多次元配列のように配列内の全要素が一つずつ列挙されるのではなく、単にジャグ配列の1段目に格納されている配列が列挙されます。 そのため、ジャグ配列内のすべての要素を列挙したい場合は、for文・foreach文ともに各段それぞれでfor文・foreach文を入れ子にしていくことで列挙する必要があります。

for・foreachで3段ジャグ配列を列挙する
using System;

class Sample {
  static void Main()
  {
    // 3段のジャグ配列
    int[][][] doubleNested = {
      new int[][] {
        new int[] {0, 1, 2},
        new int[] {3, 4},
        new int[] {5, 6, 7, 8},
      },
      new int[][] {
        new int[] {9, 10},
        new int[] {11, 12, 13, 14},
      },
      new int[][] {
        new int[] {15, 16, 17},
        new int[] {18},
        new int[] {19, 20},
        new int[] {21, 22},
      },
    };

    // for文を使って列挙
    for (var n1 = 0; n1 < doubleNested.Length; n1++) {
      Console.Write("{ ");
      for (var n2 = 0; n2 < doubleNested[n1].Length; n2++) {
        Console.Write("( ");
        for (var n3 = 0; n3 < doubleNested[n1][n2].Length; n3++) {
          Console.Write("{0}, ", doubleNested[n1][n2][n3]);
        }
        Console.Write("), ");
      }
      Console.WriteLine("}, ");
    }
    Console.WriteLine();

    // foreach文を使って列挙
    foreach (int[][] jagged in doubleNested) {
      Console.Write("{ ");
      foreach (int[] arr in jagged) {
        Console.Write("( ");
        foreach (int elem in arr) {
          Console.Write("{0}, ", elem);
        }
        Console.Write("), ");
      }
      Console.WriteLine("}, ");
    }
    Console.WriteLine();
  }
}
実行結果
{ ( 0, 1, 2, ), ( 3, 4, ), ( 5, 6, 7, 8, ), }, 
{ ( 9, 10, ), ( 11, 12, 13, 14, ), }, 
{ ( 15, 16, 17, ), ( 18, ), ( 19, 20, ), ( 21, 22, ), }, 

{ ( 0, 1, 2, ), ( 3, 4, ), ( 5, 6, 7, 8, ), }, 
{ ( 9, 10, ), ( 11, 12, 13, 14, ), }, 
{ ( 15, 16, 17, ), ( 18, ), ( 19, 20, ), ( 21, 22, ), },