言語で用意されている構文を使う他に、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メソッド)を参照してください。