我想在C#中删除ObservableCollection中的多个项目。我的代码是:
var item = (MoveDataModel)e.SelectedItem;
var answer = await DisplayAlert("Confirmation", "Are you sure you wish to delete " + item.value + "?", "Yes", "No");
if (answer)
{
var type = item.type;
var value = item.value;
foreach (var listItem in items)
{
if ((listItem.value == item.value) || (listItem.location == value && type == "Location"))
{
items.Remove(listItem);
itemCount--;
}
}
}
第一次迭代工作正常。但是,它挂起了
foreach (var listItem in items)
第二遍。我不确定如何使其工作。
答案 0 :(得分:1)
在迭代集合时无法修改它。尝试这样的事情(我还没有检查语法,可能需要清理)
var removeList = items.Where(x => x.value == value).Where(y => y.type = type).ToList();
foreach(var i in removeList) {
items.Remove(i);
itemCount--;
}
答案 1 :(得分:1)
拥有自己的计数器,可以在列表中向后循环,这样您就不必为删除的索引重新调整。
System.Collections.ObjectModel.ObservableCollection<object> list = new System.Collections.ObjectModel.ObservableCollection<object>();
private void RemoveStuff()
{
var i = list.Count - 1;
for (; i <= 0; i--)
{
// some checks here to make sure this is the time you really want to remove
list.Remove(i);
}
}