0

INotifyCollectionChanged を実装する .Net のジェネリック Queue のバージョンを作成した人はいますか、それとも .Net フレームワークのどこかにすでに隠されているものはありますか?

4

2 に答える 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

私はクリス・ウェンハムと同じアプローチを使用しました。負荷がかかると、エンキュー/デキューごとに新しいNotifyCollectionChangedEventArgsを割り当てる必要があるため、パフォーマンスが低下します。

とにかく、エンキューで、NotifyCollectionChangedAction.Add、追加されたアイテム、およびインデックスとしてCount-1を使用して引数を送信します。デキューで、NotifyCollectionChangedAction.Remove、削除されたアイテム、およびインデックス0を使用して引数を送信します。

于 2009-09-18T00:49:24.560 に答える