我试图删除每个循环中的当前项目,如果某些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与选定的房间匹配,则删除预订的房间
答案 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()