2017-05-09 85 views
0

の内側のReDim配列にしようとしたとき、私はここにこの行のクラスの配列をREDIMしようとしている:VB.NET "オブジェクト参照がオブジェクトのインスタンスに設定されていません。"配列

For i As Integer = 0 To RacerList(i).CompatibilityArr.Count - 1 
     For o As Integer = 0 To RacerList(i).CompatibilityArr.Count - 1 
      ReDim Preserve RacerList(i).CompatibilityArr(o).HeightCompArr(AmountOfRacers - 1) 
     Next 
    Next 

コード結果のREDIMラインをオブジェクト参照」でオブジェクトのインスタンスに設定されていません"

のコード行の上

、私が持っている:。

For i As Integer = 0 To RacerList.Count - 1 
     ReDim Preserve RacerList(i).CompatibilityArr(AmountOfRacers - 1) 
    Next 

完全に正常に動作しますので、私は、私は "HeightCompArrを書くときにエラーが、また(HeightCompArrであることをかなり確信してどの

Public RacerList As New List(Of Racer) 

<Serializable()> Public Class Racer 
    Public Property Name As String 
    Public Property CleatSize As String 
    Public Property SkillLevel As String 
    Public Property Height As String 
    Public Property Team As String 
    Public CompatibilityArr() As Compatibility 
End Class 

<Serializable()> Public Class Compatibility 
    Public HeightCompArr() As HeightComp 
End Class 

<Serializable()> Public Class HeightComp 
    Public Name As String 
    Public Score As Integer 
End Class 
:「それは以下

は、別のモジュールのフォーム上にあるクラス/構造/配列の全てである)ドロップダウンメニューでその中の子どもを示唆していません

これは配列の中に配列が含まれているかどうかに問題があるかどうかはわかりません。私はどんなアドバイスにも大変感謝しています。

+0

可能な重複:

私は次のようにあなたの代わりに配列し、再構築のList(Of ...)を使用することをお勧めしたいです/stackoverflow.com/questions/39432460/visual-basic-redim-preserve-object-reference-not-set-to-an-instance-of-an-ob) –

+0

私は他のソリューションを実装することはできません私の問題のために働く質問 - これは不正確な実装のためか解決策が当てはまらない、確信が持てない –

+1

Kenの答えが正しい可能性が高いです。 "CompatibilityArr"のサイズを設定しましたが、その中に "Compatibility"のインスタンスは含まれていません。したがって、内部の "HeightCompArr"にアクセスしようとするとエラーが発生します。 'CompatibilityArr 'の各インデックスをループしてインスタンスを割り当てる必要があります:' CompatibilityArr(i)=新しい互換性() ' –

答えて

1

あなたは構文上のバグと設計上の問題があります。

構文上の問題は、REDIM PRESERVEはオブジェクトにスペースを作成するだけであり、実際にはオブジェクトを作成しないということです。これを修正するには、配列の要素ごとに新しいオブジェクトを作成する必要があります。

あなたが持っている設計上の問題は、すべてのレーサーを他のすべてのレーサーと比較しようとしていることですが、その比較をRacerクラスに保存していることです。 Racerの参照は比較の内部にあるべきで、他の方法ではありません。 /:[ - - のReDim保存オブジェクトのインスタンスに設定されていないオブジェクト参照のVisual Basic](HTTP

Private Sub Main() 
    Dim RacerList As New List(Of Racer) 
    Dim CompatibilityArr As New List(Of Compatibility) 

    Dim Adam As New Racer With {.Name = "Adam", .CleatSize = "10", .SkillLevel = "2", .Height = "180", .Team = "Blue"} 
    Dim Bill As New Racer With {.Name = "Bill", .CleatSize = "11", .SkillLevel = "3", .Height = "185", .Team = "Blue"} 
    Dim Charlie As New Racer With {.Name = "Charlie", .CleatSize = "12", .SkillLevel = "4", .Height = "190", .Team = "Red"} 
    RacerList.Add(Adam) 
    RacerList.Add(Bill) 
    RacerList.Add(Charlie) 
    CompatibilityArr.Add(New Compatibility With {.Racer1 = Adam, .Racer2 = Bill, .HeightCompScore = 5}) 
    CompatibilityArr.Add(New Compatibility With {.Racer1 = Adam, .Racer2 = Charlie, .HeightCompScore = 6}) 
    CompatibilityArr.Add(New Compatibility With {.Racer1 = Bill, .Racer2 = Charlie, .HeightCompScore = 7}) 
End Sub 


<Serializable()> Public Class Racer 
    Public Property Name As String 
    Public Property CleatSize As String 
    Public Property SkillLevel As String 
    Public Property Height As String 
    Public Property Team As String 
End Class 

<Serializable()> Public Class Compatibility 
    Public Racer1 As Racer 
    Public Racer2 As Racer 
    Public HeightCompScore As Integer 
End Class 
関連する問題