有没有人编写过实现 INotifyCollectionChanged 的 .Net 通用队列版本,或者是否已经在 .Net 框架深处某个地方隐藏了一个?
Chris Wenham
问问题
2102 次
2 回答
1
快速搜索没有显示任何结果。但是接口很简单,扩展 Queue 类并添加对接口的支持几乎是微不足道的。因此只需覆盖所有方法:
// this isn't the best code ever; refactor as desired
protected void OnCollectionChanged( NotifyCollectionChangedEventArgs ccea){
var temp = CollectionChanged;
if(temp != null) temp(this, ccea);
}
// and later in the class
public override SomeMethodThatAltersTheQueue(object something){
// record state of collection prior to change
base.SomeMethodThatAltersTheQueue(something)
// create NotifyCollectionChangedEventArgs with prior state and new state
OnCollectionChanged(ccea);
}
于 2008-11-11T15:09:27.843 回答
0
我使用了与 Chris Wenham 相同的方法。在负载下,性能会受到影响,因为需要为每个 Enqueue/Dequeue 分配新的 NotifyCollectionChangedEventArgs。
无论如何,在 Enqueue 中,使用 NotifyCollectionChangedAction.Add、添加的项目和 Count-1 作为索引发送 args。在 Dequeue 中,发送带有 NotifyCollectionChangedAction.Remove 的 args、已删除的项目和索引 0。
于 2009-09-18T00:49:24.560 回答