4

追加して列挙できるジェネリック コレクション クラスが必要です。からICollection<T>継承するIEnumerable<T>ため、クラスは実際には から継承するだけで済みますICollection<T>ICollection<T>BCLに CollectionBase のジェネリック バージョンのように継承する単純なジェネリック クラスはありますか? そうでない場合、どのクラスが最も近いですか?

List<T>が使用しているものはどれだと思いますが、シーケンシャルな側面は必要ありません。より良いものはありますか (つまり、[メモリ フットプリントが小さい/アクセスが高速である/よりシンプル] という意味です)。バッグがあれば完璧です。

編集 1:私の特定の例では、.concat別の IEnumerable にアクセスし、クエリを実行してから、結果を表示しています (順不同)。私は自分のクラスを作ろうとしていません。何度も使い捨てコレクションを作成する必要があったので、使用するのに最適な使い捨てを見つけることが役立つと思いました。私は何度も似たようなことをしたと感じているので、この質問はできるだけ一般的なものにしておくべきだと感じました (しゃれた意図はありません)。

編集 2:皆さんの回答に感謝します。@BlueRaja が指摘したように、どの単純なクラスでもほぼ同じオーバーヘッドが発生するため、元の使用方法に固執すると思いますList<T>。どれもほぼ同じなので、「入力しやすい」「もういちいち持ち込まなくていい」などのバカバカしい理由も悪くない。

4

5 に答える 5

2

[メモリフットプリントが小さい/アクセスが速い/シンプル]

これらはすべてほぼ同じメモリフットプリントを持ち、ICollectionを使用してもインターフェイスは変更されません。

本当に重要なのは、必要な操作に最適なスケーリングを行うことです。リンクリストは(ヘッド/テール要素の)追加/削除をより適切に行いますが、配列ベースのリストはランダムアクセスを備えています。他の構造もあります-どちらを使用するかは、アプリケーションによって異なります。

于 2010-05-04T01:52:13.223 に答える
1

あなたはおそらく調べたいと思うでしょうCollection<T>。ドキュメントが示すように、サブクラス化の明確な目的のために設計されました。

ジェネリック コレクションの基本クラスを提供します。

そうは言っても、どのコレクションでも問題ありません。などから継承しましList<T>Stack<T>。実際に必要な機能に最も近いものを選択してください。

于 2010-05-04T01:39:00.843 に答える
1

より小さく、より速くすべては、正確に何をしているのか、そして何を必要としているのかに依存します。私がお勧めする唯一の他のクラスはLinkedList<>、 which implementationsICollection<>です。

于 2010-05-04T01:39:22.110 に答える
0

Reflectorを使用して .NET FCL をチェックし、どのクラスがそのコレクションを使用しているかを確認できます。(F3で起動できる検索機能があります。)

C5 ライブラリを見て、ニーズを満たすコレクションが既に実装されているかどうかを確認することもできます。コレクション インターフェイスの階層については、 C5 マニュアルの 13 ページを参照してください。

于 2010-05-04T01:45:04.687 に答える
0

CollectionBase主に、型付きコレクションを作成するための簡単なメカニズムを提供するために存在していました。Generics を使用すると、すべてのコレクションが型付けされます。CollectionBaseの拡張機能が使用されていたほとんどのケースでは、現在ではList<>やなどの組み込みコレクションを使用する必要がありLinkedList<>ます。

Collection<>タイプ以外の理由でカスタム コレクションを提供する必要がある場合 (つまり、追加時の追加の検証、またはいくつかの非標準ロジック) のためにまだ存在します。 Collection<>以前ほど一般的に使用されておらずCollectionBase、はるかに小さなニーズに対応しています。

于 2010-05-04T03:19:14.990 に答える