C# 在集合中循环时从ObservableCollection中删除项

C# 在集合中循环时从ObservableCollection中删除项,c#,wpf,list,mvvm,observablecollection,C#,Wpf,List,Mvvm,Observablecollection,我在ObservableCollection中循环查找通过将布尔值设置为true来标记的项。在对该项执行所需操作后,我希望将其从OnservableCollection中删除。我不能在foreach循环中这样做,所以我想列出所有标记的项,然后在foreach循环之后,立即清除集合中的所有项。但我甚至不能开始,因为我不知道如何在foreach循环中获取项的索引 private void Upload() { List&

我在ObservableCollection中循环查找通过将布尔值设置为true来标记的项。在对该项执行所需操作后,我希望将其从OnservableCollection中删除。我不能在foreach循环中这样做,所以我想列出所有标记的项,然后在foreach循环之后,立即清除集合中的所有项。但我甚至不能开始,因为我不知道如何在foreach循环中获取项的索引

            private void Upload()
            {
                List<TestResult> kill;
                foreach (var tr in TestResults)
                {
                    if (tr.CanUpload)
                    {
                        StatusContent = "Uploading " + tr.FileName;
                        FileOps.UploadDocument(tr);
                        kill.Add(tr);
                        tr.CanUpload = false;
                        RaisePropertyChanged("TestResults");
                    }

                }
                //this doesn't work 
                //TestResults.Remove(TestResults.Where(x => x.CanUpload == true));
             }      
private void Upload()
{
列表杀戮;
foreach(测试结果中的var tr)
{
如果(tr.CanUpload)
{
StatusContent=“上传”+tr.FileName;
上传文件(tr);
kill.Add(tr);
tr.CanUpload=false;
RaisePropertyChanged(“测试结果”);
}
}
//这不管用
//Remove(TestResults.Where(x=>x.CanUpload==true));
}      

我已经尝试使用上面的方法,但是我缺少了一些关键的部分来让它正常工作。

使用for循环。正如您所注意到的,您无法删除使用foreach循环的集合中的项

但删除项目时必须更新当前项目索引;)

像这样的东西应该能起作用

for (var i = myList.Count() - 1; i >= 0; i--)
{
    ...
} 

谢谢你的回答。最后,我在从可观察集合创建的列表上创建了一个foreach循环,然后从集合中删除列表中符合条件的每个项目。欢迎光临。如果你接受并投票,那就太好了。