我有一个父类:CMove
我有一堆继承 CMove 的子类: M[Name of Move]
我有一本字典:pMoveSet(of Stings, CMove)
字典的值是新的子类:例如 pMoveSet(Key1, New MTackle)
我想将字典中的实例设置为包含子类实例的数组(作为 CMove):PossMoves(i) = kvp.Value
我在字典上的“For Each”循环中执行此操作,在其中检查键以查看是否需要该值。如果我想要这个值,我将 kvp 的值设置为等于数组的一个元素。
我有一个 msgbox,可以在将子对象添加到数组后直接正确显示数组位置和子对象的名称。
我的代码离开了循环,我想数组应该包含我想要的所有相关的 CMove 子类。
与“For Each”循环中的 msgbox 相同的 msgbox 崩溃,并出现错误“NullReferenceException 未处理。对象引用未设置为对象的实例。”</p>
在循环外再次调用数组时,最初在“For Each”循环中创建并应用于数组的实例似乎丢失了。
我怎样才能解决这个问题?我希望能清楚地了解如何处理这个问题。代码如下。
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.