2013-03-29 88 views
1

我有對象的列表:「收藏已修改;」 ......但它不是

Dim objList As BindingList(Of Object1) 

每個那些包含對象2的列表。我試圖通過objList迭代,這樣我可以從每個Object1各自的對象2列表中刪除對象2的具體實例:

For Each obj In objList 
    Dim objRemove = obj.Object2List.Where(AddressOf ObjCheck) 
    For Each obj2 In objRemove 
     obj.Object2List.Remove(obj2) 
    Next 
Next 

這引發錯誤「收集了修改;枚舉操作可能不會執行。」

我不明白的是,我從Object2List中刪除了一個對象,該對象沒有被枚舉。爲什麼這個錯誤被拋出?

回答

1

調用Where實際上並不執行查詢並創建新的集合。它只是創建一個迭代器,它迭代原始列表,跳過與查詢不匹配的元素。

您需要添加一個調用ToList()立即執行查詢和創建項目的一個新的集合:

Dim objRemove = obj.Object2List.Where(AddressOf ObjCheck).ToList() 
0

在這種情況下會枚舉Object2List只是間接的。該objRemove收集內部保持參考Object2List並列舉objRemove會隱還列舉Object2List

解決最簡單的方法是通過指數來枚舉集合

Dim index = 0 
Dim list = obj.Object2List 
While index < list.Count 
    If ObjCheck list(index) Then 
    list.RemoveAt(index) 
    Else 
    index = index + 1 
End 
相關問題