親クラスがあります:CMove
CMoveを継承する子クラスがたくさんあります:M[移動の名前]
私は辞書を持っています:pMoveSet(of Stings、CMove)
ディクショナリの値は新しい子クラスです。例:pMoveSet(Key1、New MTackle)
ディクショナリから子クラスのインスタンスを保持する配列(CMoveとして)にインスタンスを設定したい:PossMoves(i)= kvp.Value
これは、辞書の「For Each」ループで行い、キーをチェックして値が必要かどうかを確認します。値が必要な場合は、kvpの値を配列の要素と等しくなるように設定します。
子オブジェクトが配列に追加された直後に、配列の位置と子オブジェクトの名前を正しく表示するmsgboxがあります。
私のコードはループを離れ、配列は必要なCMoveの関連するすべての子クラスを保持する必要があると思います。
「ForEach」ループのメッセージボックスと同じメッセージボックスがクラッシュし、「NullReferenceExceptionが処理されませんでした。オブジェクト参照がオブジェクトのインスタンスに設定されていません。」</p>
元々「ForEach」ループで作成されて配列に適用されたインスタンスは、配列がループの外で再度呼び出されるまでに失われているようです。
どうすればこれを修正できますか?これをどのように処理するかについて、いくらか明確にしていただければ幸いです。コードは以下のとおりです。
Dim PossMoves() As CMove, kvp As KeyValuePair(Of String, CMove)
ReDim PossMoves(0)
For Each kvp In pMoveSet
If Val(kvp.Key) < pLvl Then
PossMoves(UBound(PossMoves)) = kvp.Value
MsgBox(UBound(PossMoves) & vbCrLf & PossMoves(UBound(PossMoves)).Name)
ReDim PossMoves(UBound(PossMoves) + 1) 'Will add unused element after the last possible move
End If
Next
ReDim Preserve PossMoves(UBound(PossMoves) - 1) 'Removes blank value at the top of array
MsgBox(UBound(PossMoves) & vbCrLf & PossMoves(UBound(PossMoves)).Name) 'Error on this line.