我有一个集合
ObservableCollection<PathInfo> _pathInfos = new ObservableCollection<PathInfo>();
和相应的排序视图:
CollectionView _sortedPathInfos = CollectionViewSource.GetDefaultView(_pathInfos);
_sortedPathInfos.SortDescriptions.Add(new SortDescription("LastAccess", ListSortDirection.Descending));
现在我想确保源集合中的_maxItems不超过_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);
}
有更好(更短)的方法吗?
答案 0 :(得分:0)
LINQ可以帮到你。
怎么样?
_sortedPathInfos.View.Skip(_maxItems).ToList().ForEach(x => _pathInfos.Remove(x));
ObservableCollection不支持RemoveRange,并且每次从_pathInfos中删除某些内容时都会触发“删除元素”事件,这在我看来处理大型列表时非常低效。
Why does ObservableCollection not support bulk changes?如果你感兴趣的话,这个帖子几乎没有什么可能的修复。
答案 1 :(得分:0)
使用LINQ,您可以使用“Take”从不可数的数量中获取所需数量的元素:
_sortedPathInfos.Take(20);
查看:http://msdn.microsoft.com/en-us/library/bb503062%28v=vs.90%29.aspx