0

私は次のものを持っています:

For Each curCustomer As Customer In _customersEdit
    If (IsNothing(curCustomer)) Then
        Continue For
    End If
    'other code
    If (curCustomer.SeatIDs(0) = primarySeat) Then
        'other code
    End If

    If (curCustomer.SeatIDs.Count = 0) Then
        curCustomer = Nothing
    End If
Next

このコードを一度実行した後、2回目に実行すると、SeatIDsがNothingであるため、プライマリシートかどうかの確認でエラーが発生します。curCustomer = Nothingにブレークポイントを設定したとき、最初は何もトリガーされませんでした。顧客名を「test」に変更し、次の行にブレークポイントを設定すると、curCustomerが本来あるべきものに設定されませんでした。次にコードを再度実行すると、プライマリシートのチェックでエラーが発生し、curCustomerは、Nothingに設定する前に付けた「テスト」名でまだ存在していました。なぜこうなった?

4

2 に答える 2

2

次のfor-each シーケンスで再初期化され、参照としてのみ機能するためcurCustomer = Nothing(例では) 実際には何もしていません(配列アイテム自体ではなく、配列内のアイテムへの参照を null にしています)。curCustomercurCustomer

インデックスを使用して、配列内で何も設定しないようにする必要があります_customersEdit

あなたがすることができます:

    Dim i As Integer
    For i = 0 To _customersEdit.Count - 1
        ' your check code
        If (curCustomer.SeatIDs.Count = 0) Then
            _customerEdit(i) = Nothing
        End If

    Next

またはおそらくより良い:

    Dim i As Integer
    For i =  _customersEdit.Count - 1 To 0 Step -1
        ' your check code
        If (curCustomer.SeatIDs.Count = 0) Then
            _customerEdit.RemoveAt(i)
        End If
    Next
于 2012-10-23T18:35:05.910 に答える
0

_customersEdit(i) = Nothing配列内の参照をNothingに設定します。

于 2012-10-23T18:32:20.603 に答える