多次元配列も1次元配列と同様for文・foreach文で列挙することができます。 ただ、foreach文で多次元配列を列挙する場合、行や列ごとといった部分配列が列挙されるのではなく、次元が平坦化された1次元の数列として列挙されます。 この際、多段配列内の各要素は、より高い次元にあるインデックスの小さい要素から順に列挙されます。 そのため、多次元配列から行や列ごとに要素を抽出したい場合は、foreach文ではなくfor文でインデックスを指定して列挙する必要があります。

for・foreachで2次元配列を列挙する
using System;

class Sample {
  static void Main()
  {
    // 3×4個の要素を持つ2次元配列
    int[,] matrix = {
      {0, 1, 2, 3},
      {4, 5, 6, 7},
      {8, 9, 10, 11},
    };

    // for文を使って列挙
    for (var d1 = 0; d1 < matrix.GetLength(0); d1++) {
      Console.Write("( ");
      for (var d2 = 0; d2 < matrix.GetLength(1); d2++) {
        Console.Write("{0}, ", matrix[d1, d2]);
      }
      Console.WriteLine("), ");
    }
    Console.WriteLine();

    // foreach文を使って列挙
    foreach (var elem in matrix) {
      Console.Write("{0}, ", elem);
    }
    Console.WriteLine();
  }
}
実行結果
( 0, 1, 2, 3, ), 
( 4, 5, 6, 7, ), 
( 8, 9, 10, 11, ), 

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,