0

私は以下のようなクラスがあるVB.netで作業しています:

Public Class vertex
    Public wasVisited As Boolean
    Public name, type As String
    Public x_pos, y_pos As Double

    Public Sub New(ByVal x_pos As Double, ByVal y_pos As Double, ByVal name As Integer, ByVal type As String)
        Me.x_pos = x_pos
        Me.y_pos = y_pos
        Me.name = name
        Me.type = type
        wasVisited = False
    End Sub
End Class

「グラフ」という名前の他のクラスのオブジェクトがあり、グラフクラスのコンストラクターで頂点クラスのコンストラクターを呼び出しています。

私は頂点クラスの配列を持っています: Public vertices() As vertex

そして redim vertices(2000): 何らかの理由で配列のサイズを再度変更します。

ここで、空の値をチェックするために配列をループすると、エラーがスローされます。

オブジェクト参照がオブジェクト インスタンスに設定されていません。(値には「何もない」が含まれているため)

このようにチェックしているのに、

If (vertices(i).name) Is Nothing Then
            Exit For
        End If

配列の空の要素を確認するにはどうすればよいですか?

4

3 に答える 3

1

vertices()redim操作前のサイズは?2000 未満の場合、追加された要素はNothing配列の拡大の直後になるため、最初の配列サイズを超える i の値のnameプロパティにアクセスしようとvertices(i)すると、実際には null オブジェクト参照を逆参照しようとしています。

vertices(i) IsNot Nothingプロパティの値をテストする前に確認するか、配列のすべての要素にnew vertexオブジェクトが割り当てられていることを確認する必要があります。

If vertices(i) Is Nothing OrElse vertices(i).name Is Nothing Then
    Exit For
End If

同様の問題に関する vbforums のスレッドは次のとおりです

于 2013-06-21T06:21:17.900 に答える