2013-11-23 8 views

答えて

66
  • 次の拡張または実装の基本インターフェイスです。それは直接アクセスを許さず、読み込み専用です。したがって、コレクションを反復処理する場合にのみ、これを使用してください。

  • ICollection<T> extend IEnumerable<T>さらに、コレクション内に要素が存在するかどうかを追加、削除、テストし、合計要素数を取得することができます。インデックスで要素に直接アクセスすることはできません。これは、対応する要素が見つかるまで反復処理を開始する必要があるため、O(n)操作になります。

  • IList<T> extend ICollection<T>(したがって、すべてのプロパティを継承しますが)さらに、インデックスで要素に直接アクセスすることもできます。これはO(1)操作です。

  • List<T>は、IList<T>インターフェイスの単なる具体的な実装です。

コードでは、呼び出し元のニーズに対応するオブジェクト階層で最も高い型を常に公開する必要があります。たとえば、発信者がデータセットを列挙する場合のみ、IEnumerable<T>を使用します。彼らがインデックスによって要素に直接アクセスする必要がある場合は、IList<T>を公開してください。

List<T>はコード内でのみ使用する必要がありますが、通常は公開するメソッドのシグネチャには含まれません。これにより、契約を破らずに具体的な実装を簡単にスワップすることができるので、柔軟性が向上します。

+0

ありがとうございます。レスポンスタイムでは、要素を見つけたりコレクションをソートしようとすると、その中で何がベストですか? –

+5

LINQを使うと、 'IEnumerable 'でそれを実現できます。 –

+0

これは素晴らしいリソースです.Hashsetはどこに適合しますか? – Evonet

関連する問題