私はプログラムをしている間、時々私はこの疑いを持っています。私はList<T>
を使用していますが、他は使用していません。List、Collection、Enumerableの違いは誰か分かりますか?
どのような状況でどのような状況で使用するのが良いかを知りたいときは、
私はプログラムをしている間、時々私はこの疑いを持っています。私はList<T>
を使用していますが、他は使用していません。List、Collection、Enumerableの違いは誰か分かりますか?
どのような状況でどのような状況で使用するのが良いかを知りたいときは、
私は、あなた自身でドキュメントを読むことができると確信しています。
foreach
ループ内にこのインターフェイスを実装します。Collection
は、一般的に、さらに(すなわちAdd
、Remove
、Contains
などを使用)、コレクションのような振る舞いを持ちたいユーザー定義クラスによって拡張されている(したがって、あなたはそれを反復処理することができます)IEnumerable
の実装です。また、「そのまま」使用することもできます。List
もまた、特定のタイプのオブジェクトのコンテナとして一般に "そのまま"使用されるIEnumerable
の実装です(したがって、反復処理することができます)。バックグラウンドで動的に調整する配列を使用し、ArrayList
の一般的な同等物です。 IEnumerable
はジェネリックと非ジェネリックの両方になることができますが、Collection
とList
は、一般的なクラスとしてのみを使用することができることを注意。
MSDN次のことができます。
一覧は直線的にアイテムを保持しているインスタンス化タイプです。 (編集:リンクされたリストではなく、ダイナミックな配列で実装されていると言われていますが、それは私の推測でした)。
ICollection
/CollectionBase
およびIEnumerable
は、直接的にインスタンス化可能な型ではありません。
CollectionBase
/ICollection
は、それ自身をコレクションとみなし、複数のアイテムを保持する任意のクラスによって継承または実装される基本クラス/インターフェイスです。 CollectionBase
/ICollection
でも、コレクションの実装を知らなくてもコレクションを渡すことができます。
IEnumerable
も、コレクションを反復処理するためのメソッドを提供するインターフェイスです。 IEnumerable
では、基本的にコレクション上でforeach
ループを使用できます。インターフェイスメソッドを直接使用してC++スタイルのイテレータを取得することもできますが、foreach
ループのエラーが起こりにくいです。
Listリンクされたリストではなく動的配列を使用します。 – Tudor
@Digitlworld:MicrosoftのCLRチームの奇妙な世界では、リストは実際にはCSの意味でのリストではありません。「SCG.List
C#土地では、インターフェイス、抽象クラス、および通常クラスはすべて「タイプ」であると私は理解していました。リフレクションベースの定義のインスタンスは、すべて「Type」の許容値です。 – digitlworld
あなたが(下記参照)3の定義を見れば、あなたはList
がEnumerable
とICollection
を実装し、ICollection
はIEnumerable
を実装していることがわかります。
List
はです。CLASSは、同じタイプのアイテムに加えて、他の2つのインターフェイスで指定された機能の可変数を格納できます。
ICollection
は、コレクションを操作する一般的な方法を指定するインターフェイスです。注:これはインタフェースなので、インスタンス化することはできません。
IEnumerable
は、コレクションを反復する方法を指定するインターフェイスです。注:これはインタフェースなので、インスタンス化することはできません。
インデックスによってアクセスできるオブジェクトの厳密に型指定されたリストを表します。リストを検索、並べ替え、操作するためのメソッドを提供します。
public class List<T> : IList<T>, ICollection<T>,
IEnumerable<T>, IList, ICollection, IEnumerable
ジェネリックコレクションを操作するメソッドを定義します。
public interface ICollection<T> : IEnumerable<T>,
IEnumerable
指定した型のコレクションに対する単純な反復処理をサポートする列挙子を、公開します。
public interface IEnumerable<out T> : IEnumerable
マニュアルを参照してください。 – SLaks
Listでも何をしたいかによって異なりますジェネリックスは、何かが型指定リストであることを確認したり作成したりする素晴らしい方法ですが、あなた自身がかなりデザインしなければならない場所を列挙したい場合enumerator(Counter)IEnumerable が良いとは思うけど、foreachとforループもあります。それはあなたがやりたいことや速くしたいことに依存しています。Nicholasは最高の説明をするためにいくつかの素晴らしいリンクを投稿しました.. –
MethodMan