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

运行此代码一次没问题后,当您第二次运行它时,虽然我在检查它是否是主要座位时出错,因为 SeatIDs 什么都没有。当我在 curCustomer = Nothing 上设置断点时,它第一次触发,我将客户名称更改为“test”,在下一行放置一个断点,它确实将 curCustomer 设置为它应该有的任何东西。接下来,当我再次运行代码时,它在检查主要座位时抛出了错误,并且 curCustomer 仍然存在,并且在将其设置为 Nothing 之前我给它起了“测试”名称。为什么会这样?

4

2 回答 2

2

curCustomer = Nothing实际上并没有做任何事情(在示例中),因为它curCustomer在下一个 for-each 序列中重新初始化,并且curCustomer仅作为引用起作用(您正在对数组中的项目的引用,而不是数组项目本身)。

您将需要使用索引将其设置为数组中的任何内容_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 回答