C#のコードを書いていて、IEnumerableをなんとなく使っていたため、
List型・Collection型と比較しながらまとめてみました。
IEnumerableとは
コレクションの要素を順番に取り出すことができるインターフェース
ひとことで言うとforeach
で繰り返しをするためのイテレータを表す型
特徴
- 遅延評価: IEnumerableは要素を順次取り出すため、必要な要素だけが評価される。これにより、大量のデータを効率的に処理できる
- 読み取り専用: コレクションの要素を追加や削除するができない。要素の変更は行えない
- インデクサアクセスなし: IEnumerableにはインデクサがないため、特定の要素にランダムアクセスすることができない
インデクサとは
配列型と同様に [] を用いた要素の読み書きが行えるような仕組み
- 継承可能: IEnumerableはインターフェースなので、独自のコレクションクラスを定義することができる
ICollection型
IEnumerableを継承したものなのでコレクションの要素を順番に取り出すことができる。
IEnumerableと異なり、要素数のカウントを行うことができる
IList型
コレクションに対する、追加・変更・削除も含めた、全ての操作が可能である。
ICollection型を継承しているので、要素数のカウント、コレクションの列挙を行うことができる。
まとめ
IEnumerableはコレクションの列挙のみ可能、ICollectionは加えてコレクションの要素数のカウントが可能である。IListは2つの特徴に加えて、コクションの追加・変更・削除を含めた全ての操作が可能
まとめ
継承の流れ
IEnumerable → ICollection → IList
IEnumerableはコレクションの列挙のみ可能、ICollectionは加えてコレクションの要素数のカウントが可能である。IListは2つの特徴に加えて、コクションの追加・変更・削除を含めた全ての操作が可能