言語で用意されている構文を使う他に、Array.CreateInstanceメソッドを使うことで任意の型・任意の長さの配列を作成することが出来ます。 このメソッドの戻り値はArrayクラスとなるので、必要に応じて適切な配列型にキャストしてから使います。 このメソッドで作成した配列は、通常の構文で作成した配列と何ら変わりありません。
また、Array.GetValueメソッドおよびArray.SetValueメソッドを使うことで、配列の各要素にアクセスするための構文(インデクサ)を使用せずに配列に値を取得・設定することが出来ます。 このメソッドは配列の型・次元がどのようなものでも値を取得・設定することが出来ます。
Arrayクラスのメソッドを使って配列の作成と要素の取得・設定を行う (CreateInstance, GetValue, SetValue)
Imports System
Class Sample
Shared Sub Main()
' 型がIntegerで長さが5の配列を作成
Dim arr1() As Integer = DirectCast(Array.CreateInstance(GetType(Integer), 5), Integer())
arr1(0) = 0
arr1(1) = 1
arr1(2) = 2
arr1(3) = 3
arr1(4) = 4
For Each elem As Integer In arr1
Console.Write("{0}, ", elem)
Next
Console.WriteLine()
Console.WriteLine()
' 型がStringで長さが3の配列を作成
Dim arr2 As Array = Array.CreateInstance(GetType(String), 3)
' SetValueメソッドを使って値を設定
arr2.SetValue("Alice", 0) ' 配列のインデックス0に文字列"Alice"を設定
arr2.SetValue("Bob", 1) ' 配列のインデックス1に文字列"Bob"を設定
arr2.SetValue("Charlie", 2) ' 配列のインデックス2に文字列"Charlie"を設定
' GetValueメソッドを使って値を取得
For i As Integer = 0 To arr2.Length - 1
Console.WriteLine("arr2({0}) = {1}", i, arr2.GetValue(i))
Next
End Sub
End Class
実行結果
0, 1, 2, 3, 4, arr2(0) = Alice arr2(1) = Bob arr2(2) = Charlie
GetValueメソッド・SetValueメソッドは要素単位で値の取得・設定を行います。 バイト単位で配列内の値を取得・設定したい場合はBuffer.GetByteメソッド・Buffer.SetByteメソッドを使うことができます。 詳しくはバイト列操作 §.バイト単位での値の設定・取得 (GetByteメソッド・SetByteメソッド)を参照してください。