像(伪代码)
之类的东西ObservableCollection<TheClass> ob1 = new ObservableCollection<TheClass>();
ob1.Add(...);
ob1.Add(...);
ob1.Add(...);
ob1.Add(...);
ObservableCollection<TheClass> ob2;
ob2 = ob1.Range(0, 2);
考虑到两个集合都可以包含大量数据。
感谢
答案 0 :(得分:5)
ObservableCollection<TheClass> ob1 = new ObservableCollection<TheClass>();
ob1.Add(...);
ob1.Add(...);
ob1.Add(...);
ob1.Add(...);
ObservableCollection<TheClass> ob2;
// ob2 = ob1.Range(0, 2);
ob2 = new ObservableCollection(ob1.Skip(0).Take(2));
现在,如果确实坚持使用.Range
方法,您可以自己编写扩展程序:
public static class ObservableCollectionExtensions
{
public static ObservableCollection<T> Range(this ObservableCollection<T> sequence, int start, int count)
{
return new ObservableCollection(sequence.Skip(start).Take(count));
}
}
现在你的代码应该编译:
ObservableCollection<TheClass> ob1 = new ObservableCollection<TheClass>();
ob1.Add(...);
ob1.Add(...);
ob1.Add(...);
ob1.Add(...);
ObservableCollection<TheClass> ob2;
ob2 = ob1.Range(0, 2);
答案 1 :(得分:2)
ObservableCollection
不支持AddRange
方法。您可以通过编写扩展方法或通过创建派生自ObservableCollection
类的新类来扩展ObservableCollection
类的功能。例如:
public class ObservableRangeCollection<T> : ObservableCollection<T>
{
public void AddRange(IEnumerable<T> collection)
{
var enumerable = collection as T[] ?? collection.ToArray();
foreach (var item in enumerable)
{
Items.Add(item);
}
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, enumerable.ToList()));
}
}
然后,您可以为ObservableRangeCollection
创建ObservableCollection
而不是ob2
的实例,并使用AddRange
并使用Skip
和{{获取您最喜欢的范围1}}像这样:
Take
答案 2 :(得分:1)
使用此项,您可以保留扩展方法。
public static ObservableCollection<T> Range<T>(this ObservableCollection<T> oc, uint startIndex, uint length) =>
oc.Skip(startIndex).Take(length);
并像这样使用它:
ob2 = ob1.Range(0, 2);