从可观察集合中删除项目,同时循环访问集合



我正在循环访问已通过将布尔值设置为 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));
             }      

我已经尝试使用上面的内容,但我缺少一些使其正常工作的关键部分。

改用 for 循环。就像您注意到的那样,您无法删除正在使用foreach循环的集合中的项目。

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

这样的事情应该可以完成工作

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

最新更新