以前の記事「【VB.NET】構造体の項目に別の構造体を利用する」に関連した話題。
構造体の項目数を可変にしたい場合がある。
このような場合には、動的配列やArrayListを利用して実装することが多い。
動的配列は、状況によって極端にパフォーマンスが低下するため、ArrayListを利用することが多い。
(これについては、以前の記事「【VB.NET】ReDimとArrayList」を参照)

ArrayListを利用する場合、インスタンスの生成が必要になる。
構造体の項目は、宣言と同時にインスタンスを生成(newキーワードを指定)することができない。
そのため、別のタイミングでインスタンスを生成することになる。

前回のサンプルの部署情報が複数あることにした場合、以下のようになる。
Public Class StructureSample
 '社員情報
 Public Structure Employee
  Dim EmpID As Integer
  Dim Name As String
  '部署情報を項目に利用する
  Dim DeptList As ArrayList
 End Structure

 '部署情報
 Public Structure Dept
  Dim DeptID As Integer
  Dim Name As String
 End Structure

 Public Shared Sub Main()
  Dim Sample As New StructureSample
  Dim Emp As StructureSample.Employee

  Emp.DeptList = New ArrayList()

  '値の設定
  Emp.EmpID = 1
  Emp.Name = "社員A"
  For idx = 0 To 2
   Dim sDept As New StructureSample.Dept
   sDept.DeptID = idx
   sDept.Name = "部署" & idx

   Emp.sDept.Add(sDept)
  Next idx

  '値の出力
  Console.WriteLine("EmpID=" & Emp.EmpID)
  Console.WriteLine("Name=" & Emp.EmpName)
  For Each sDept As StructureSample.Dept In Emp.DeptList
   Console.WriteLine("DeptID=" & sDept.DeptID)
   Console.WriteLine("DeptName=" & sDept.Name)
  Next
 End Sub
End Class

【補足情報】
・インスタンスの生成は、構造体を利用する前に行う。
 →正確には、ArrayListオブジェクトの項目を利用する前に行う。