言語で用意されている構文を使う他に、Array.CreateInstanceメソッドを使うことで任意の型・任意の長さの配列を作成することが出来ます。 このメソッドの戻り値はArrayクラスとなるので、必要に応じて適切な配列型にキャストしてから使います。 このメソッドで作成した配列は、通常の構文で作成した配列と何ら変わりありません。

また、Array.GetValueメソッドおよびArray.SetValueメソッドを使うことで、配列の各要素にアクセスするための構文(インデクサ)を使用せずに配列に値を取得・設定することが出来ます。 このメソッドは配列の型・次元がどのようなものでも値を取得・設定することが出来ます。

Arrayクラスのメソッドを使って配列の作成と要素の取得・設定を行う (CreateInstance, GetValue, SetValue)
using System;

class Sample {
  static void Main()
  {
    // 型がintで長さが5の配列を作成
    var arr1 = (int[])Array.CreateInstance(typeof(int), 5);

    arr1[0] = 0;
    arr1[1] = 1;
    arr1[2] = 2;
    arr1[3] = 3;
    arr1[4] = 4;

    foreach (var elem in arr1) {
      Console.Write("{0}, ", elem);
    }
    Console.WriteLine();
    Console.WriteLine();

    // 型がstringで長さが3の配列を作成
    var arr2 = Array.CreateInstance(typeof(string), 3);

    // SetValueメソッドを使って値を設定
    arr2.SetValue("Alice", 0);    // 配列のインデックス0に文字列"Alice"を設定
    arr2.SetValue("Bob", 1);      // 配列のインデックス1に文字列"Bob"を設定
    arr2.SetValue("Charlie", 2);  // 配列のインデックス2に文字列"Charlie"を設定

    // GetValueメソッドを使って値を取得
    for (var i = 0; i < arr2.Length; i++) {
      Console.WriteLine("arr2[{0}] = {1}", i, arr2.GetValue(i));
    }
  }
}
実行結果
0, 1, 2, 3, 4, 

arr2(0) = Alice
arr2(1) = Bob
arr2(2) = Charlie

GetValueメソッド・SetValueメソッドは要素単位で値の取得・設定を行います。 バイト単位で配列内の値を取得・設定したい場合はBuffer.GetByteメソッドBuffer.SetByteメソッドを使うことができます。 詳しくはバイト列操作 §.バイト単位での値の設定・取得 (GetByteメソッド・SetByteメソッド)を参照してください。