类似以下的伪代码:
ObservableCollection<TheClass> ob1 = new ObservableCollection<TheClass>();
ob1.Add(...);
ob1.Add(...);
ob1.Add(...);
ob1.Add(...);
ObservableCollection<TheClass> ob2;
ob2 = ob1.Range(0, 2);
考虑到这两个集合都可能包含大量数据。
谢谢。
类似以下的伪代码:
ObservableCollection<TheClass> ob1 = new ObservableCollection<TheClass>();
ob1.Add(...);
ob1.Add(...);
ob1.Add(...);
ob1.Add(...);
ObservableCollection<TheClass> ob2;
ob2 = ob1.Range(0, 2);
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
方法,你可以自己编写一个扩展:
.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);
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
和 Take
方法来获取你想要的范围,例如:
ObservableRangeCollection<TheClass> ob2 = new ObservableRangeCollection<TheClass>();
ob2.AddRange(ob1.Take(3));//Returns 3 number of contiguous elements from the start
// Or to grab a Range between 2 and 5
ob2.AddRange(ob1.Skip(2).Take(3))
在你保存扩展方法的任何地方使用它。
public static ObservableCollection<T> Range<T>(this ObservableCollection<T> oc, uint startIndex, uint length) =>
oc.Skip(startIndex).Take(length);
ob2 = ob1.Range(0, 2);
ob2 = new ObservableCollection<TheClass>(ob1.Take(2));
?顺便说一下,数据的"量"应该不是什么问题,因为你只是在复制引用,对吧? - Corak