パブリック API では常に List ではなく ICollection (または IEnumerable) を返す必要があることを言及しているブログ投稿をいくつか読みました。リストの代わりに ICollection を返すことの本当の利点は何ですか?
ありがとう!
パブリック API では常に List ではなく ICollection (または IEnumerable) を返す必要があることを言及しているブログ投稿をいくつか読みました。リストの代わりに ICollection を返すことの本当の利点は何ですか?
ありがとう!
列挙子は、反復処理中に一度に 1 つのエンティティのみを返します。これは、yield returnを使用しているためです。一方、コレクションはリスト全体を返すため、リストを完全にメモリに格納する必要があります。
簡単に言えば、列挙子は軽量で効率的です。
基になるデータ構造を選択する際の自由度が高まります。
List は、実装でインデックス作成がサポートされていることを前提としていますが、ICollection ではそのような前提はありません。
これは、順序が関係ないために Set がより良いパフォーマンスを提供する可能性があることを発見した場合、クライアントに影響を与えずにアプローチを自由に変更できることを意味します。
基本的なカプセル化です。
IListの方が適切だと思いますが...
(Tの)リストと(Tの)コレクションの違いは何ですか?を参照してください。
ICollection は単なるインターフェイスですが、List はそのインターフェイスの特定の実装です。リスト以外のコンテナを後で使用したい場合はどうすればよいでしょうか? ICollection インターフェイスをパブリックに公開する場合、新しいコンテナーが ICollection インターフェイスも実装している限り、後で内部コンテナーを別のものに変更できます。