如果某些条件匹配,则从列表中删除当前项

时间:2011-06-02 12:14:18

标签: vb.net list

我试图删除每个循环中的当前项目,如果某些criterai匹配但是在删除并再次循环后它的触发错误。

我的示例代码:

        For Each Item As BookingRoom In myBookedRooms
            If Item.RoomInfo.UIN = myRoom.UIN Then
                myBookedRooms.Remove(Item)
                Continue For
            End If
        Next

* 注意RoomInfo和myRoom都是Room Class的实例

我正在使用myBookedRooms.remove但它的trigerring错误,那么正确的方法是什么呢?即,如果房间ID与选定的房间匹配,则删除预订的房间

1 个答案:

答案 0 :(得分:9)

问题是你在迭代它时修改了这个集合。

您可以使用for循环反向迭代列表:

For i = myBookedRooms.Count - 1 To 0 Step -1
    If myBookedRooms(i).RoomInfo.UIN = myRoom.UIN Then
        myBookedRooms.RemoveAt(i)
    End If
Next

或者,您可以使用RemoveAll method

myBookedRooms.RemoveAll(Function(item) item.RoomInfo.UIN = myRoom.UIN)

另一种选择是使用Enumerable.Where method来过滤结果,但与前两种方法不同,您需要反转逻辑检查以排除匹配项,因为目的是删除它们:

myBookedRooms = myBookedRooms
                    .Where(Function(item) item.RoomInfo.UIN <> myRoom.UIN)
                    .ToList()