イベントが発生したときにインデックスが必要であることがベンチマークで示されている場合は、インデックスをプロパティとして追加できOrderBook
ます。リストに要素を追加するときに、このプロパティを設定します。この値は、イベントハンドラーで使用できます。
OrderBook
これは、オブジェクトを1つList
にまとめ、この元のリストの再配置を行わないことを前提として機能します。複数のリストがあり、各オブジェクトがそれらのリストの1つだけに格納されOwner
ている場合は、格納されているリストを参照するプロパティを追加できます。
例えば...
ビルドするときList<OrderBook>
:
...
OrderBook book = CreateOrderBook(...);
list.Add(book);
book.ListIndex = list.Count - 1;
// Assign Owner here if that is needed.
...
または、インデックスの更新の簿記を管理するリストを管理するためのヘルパーを使用することをお勧めします。
public class OrderBookManager
{
private List<OrderBook> list = new List<OrderBook>();
public void Add(OrderBook book)
{
list.Add(book);
book.ListIndex = list.Count - 1;
// Assign Owner here if that is needed.
}
// Make this read-only if you want to ensure the manager controls all updates to the list (better design) but use it this way for higher performance.
public List<OrderBook> List { get { return list; } }
}
更新されたOrderBook
:
public class OrderBook
{
...
public int ListIndex { get; set; }
}
次に、このインデックスを使用したサンプルイベントハンドラー:
public void StockUpdated(object sender, MyEventArgs eventArgs)
{
OrderBook book = (OrderBook) sender;
//Here use book.ListIndex to access the original list element.
}
そのインデックスを持っている理由は何ですか?必要なものはすべてオブジェクトに含まれている必要があります。これを使用して元のリストを操作する場合(リストからこのアイテムを削除するなど)、以前に保存されたすべてのオブジェクトの保存されたインデックスを再計算するという問題があります。
他のオブジェクトとの並列リストを維持している場合は、おそらく別の設計を検討する必要があります。