2013-10-30 141 views
1

這是將對象從一個列表移動到另一個列表的正確方法嗎?將一個對象從一個集合移動到另一個對象

private ObservableCollection<SomeObject> toBeProcessed = 
           new ObservableCollection<SomeObject>(); 


public ObservableCollection<SomeObject> ToBeProcessed 
{ 
    get 
    { 
     return toBeProcessed ; 
    } 
    set 
    { 
     //implements INotifyProperyChanged: 
     SetField(ref toBeProcessed , value, "ToBeProcessed"); 
    } 
} 


public void MoveSelected(ObservableCollection<SomeOject> SelectedObjects) 
{ 
    foreach (var obj in SelectedObjects) 
    { 
     ToBeProcessed.Add(obj); 
     SelectedObjects.Remove(obj); 
    } 
} 

這是正確的方法嗎?如果是的話,還有更好的方法嗎?

更新,對不起計算過,它不能在foreach循環中進行,以將其更改爲這個

for (int i = SelectedObjects.Count - 1; i >= 0; i--) 
{ 
    ToBeProcessed.Add(SelectedObjects[i]); 
    SelectedObjects.RemoveAt(i); 
} 

它仍然是正確的方法是什麼?

+2

這個代碼將拋出一個異常'Inval idOperationException:集合已被修改;枚舉操作可能不會執行'在foreach循環 – Jehof

+5

我認爲它更適合CodeReview – Jehof

+0

你在哪裏調用'MoveSelected'? –

回答

2

嗯,你可以簡單地做:

foreach (var obj in SelectedObjects) 
    ToBeProcessed.Add(obj); 

SelectedObjects.ClearItems(); 
1

無論索引還是foreach,都無法修改集合。不過,從你的描述,的selectedObjects這裏更像一個「暫時收藏」,這是從ToSelectObjects另一個集合中選擇,所以你可能並不需要從它刪除對象,而是將它們添加到後ToBeProcessed, foreach循環的selectedObjects再次ToSelectObjects刪除它們......

相關問題