T.Add/Removeメソッドの List を広範囲に使用する 1 つのクラス ( MyClassと呼びましょう) で、非常に厄介なコードを見つけました。また、同じクラスがそのコレクションを T 型の IList を持つプロパティとして公開するため、型を変更するにはリファクタリングが必要になります。
また、その MyClass コレクションはイベント リスナー オブジェクトのコンテナーとして使用されるため、クライアント コードはサブスクライブ (コレクションに自身を追加) およびサブスクライブ解除 (コレクションから自身を削除) するだけです。リストの先頭/中間/末尾の順序は関係ありません。
パフォーマンスを向上させるために、内部の実装の詳細を置き換えたいと思います.List of Tを....と置き換えます。T の LinkedList を試しましたが、T の IList を実装していません。MSDN で T の IListを見ましたが、IListを実装するクラスのリストがないため、ドキュメントを比較できました。
もう 1 つのことは、T の IList を T の ICollection に変更しようとしたことです。これは解決策になる可能性があります ( MyClassのクライアント コードは Add/Remove メソッドを使用するため、リファクタリングは必要ありません) が、興味深いことが起こりました:
LinkedList<string> list = new LinkedList<string>();
list.Add("test");
エラーが発生すると、このコードはコンパイルされません。
'System.Collections.Generic.LinkedList' には 'Add' の定義が含まれておらず、拡張メソッド 'Add' もありません
しかし、私がそれを次のように変更したとき:
ICollection<string> list = new LinkedList<string>();
list.Add("test");
それから私は働きました。最初のサンプルがコンパイルされなかった理由と、項目の追加/削除に関して、.NET Framework での T の IList の最速の実装を教えてください。
ありがとう。