代码之家  ›  专栏  ›  技术社区  ›  Floyd Resler

从ObservableCollection中删除多个项目

  •  0
  • Floyd Resler  · 技术社区  · 7 年前

    我想删除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)
    

    第二次传球。我不知道该怎么做。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Jason    7 年前

    在迭代集合时不能修改它。尝试这样的方法(我还没有检查语法,可能需要一些清理)

    var removeList = items.Where(x => x.value == value).Where(y => y.type = type).ToList();
    
    foreach(var i in removeList) {
      items.Remove(i);
      itemCount--;
    }
    
        2
  •  1
  •   Gauthier    7 年前

    有自己的计数器,在列表中向后循环,这样就不必重新调整删除的索引。

    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);
        }
    
    }
    
    推荐文章