構造体の中に配列を含める場合、初期化時に注意が必要です。
構造体の中に配列を宣言する
Structure Data
Dim A As Integer
Dim B As String
Dim C() As Integer
Dim D() As Integer = {10,50,100} 'エラー
Dim E(2) As Integer = {10, 50, 100} 'エラー
Dim F(2) As Integer 'エラー
End Structure
構造体の中に配列を含める場合、空の配列の宣言のみ有効です。
初期化子を使って初期値を設定しようとしてもエラーとなります。
また、配列の長さを設定する事もできません。
実際に配列を使うには?
Structure Data
Dim A As Integer
Dim B As String
Dim C() As Integer
End Structure
Module Module1
Sub Main()
Dim d As Data
d.C = New Integer() {10, 50, 100}
For Each data As Integer In d.C
Console.WriteLine(data)
Next
End Sub
End Module
10
50
100
ひとつの方法として、Dimを使って構造体を宣言した場合は、
Newを使って配列を初期化します。
初期値を与えない場合は以下のような書き方です。
Integer型のように数値型の場合は、配列の各要素が0で初期化されます。
String型のような参照型の場合は、Nothingで初期化されます。
Dim d As Data
d.C = New Integer(2) {}
d.C(0) = 10
d.C(1) = 50
d.C(2) = 100
スポンサーリンク
コンストラクタを使用する方法
Structure Data
Dim A As Integer
Dim B As String
Dim C() As Integer
Sub New(len As Integer)
Me.C = New Integer(len) {}
End Sub
End Structure
Module Module1
Sub Main()
Dim d As New Data(2)
d.C(0) = 10
d.C(1) = 50
d.C(2) = 100
For Each data As Integer In d.C
Console.WriteLine(data)
Next
End Sub
End Module
10
50
100
今度はコンストラクタを使って配列を初期化した例です。
コンストラクタを呼び出すにはNewキーワードが必要になります。
無理やり配列を使う方法
Structure Data
Dim A1 As Integer
Dim A2 As Integer
Dim A3 As Integer
End Structure
Module Module1
Sub Main()
Dim d As Data
d.A1 = 10
d.A2 = 50
d.A3 = 100
Console.WriteLine(d.A1)
Console.WriteLine(d.A2)
Console.WriteLine(d.A3)
End Sub
End Module
特殊な事情がある場合、
連続的なデータを手動で用意すれば、配列のように使う事もできます。
(あまりオススメはしませんが。)
以上、構造体の中の配列の初期化についての説明でした。