如何使用ICollectionView中的信息从集合中删除项

本文关键字:集合 删除 何使用 ICollectionView 信息 | 更新日期: 2024-08-09 23:11:20

我有一个集合

ObservableCollection<PathInfo> _pathInfos = new ObservableCollection<PathInfo>();

以及相应的排序视图:

  CollectionView _sortedPathInfos = CollectionViewSource.GetDefaultView(_pathInfos);
  _sortedPathInfos.SortDescriptions.Add(new SortDescription("LastAccess", ListSortDirection.Descending));

现在,我希望确保源集合中的_maxItems不超过。应移除超过最大计数的最旧项目。为了实现这一点,我必须写很多行代码:

private void ensureCount()
{
  var removes = new List<PathInfo>();
  int count = 0;
  foreach (PathInfo info in _sortedPathInfos)
  {
    if (++count > _maxItems)
      removes.Add(info);
  }
  foreach (var remove in removes)
    _pathInfos.Remove(remove);
}

有更好(更短)的方法吗

如何使用ICollectionView中的信息从集合中删除项

使用LINQ,您可以使用"Take"从枚举器中获得所需数量的元素:

_sortedPathInfos.Take(20);

看看:http://msdn.microsoft.com/en-us/library/bb503062%28v=vs.90%29.aspx

LINQ可以帮助您。

_sortedPathInfos.View.Skip(_maxItems).ToList().ForEach(x => _pathInfos.Remove(x));

ObservableCollection不支持RemoveRange,每次从_pathInfos中删除内容时都会触发"element-removed"事件,在我看来,这在处理大列表时效率很低。

为什么ObservableCollection不支持批量更改?如果您感兴趣的话,这个线程几乎没有潜在的修复程序。