IEnumerableインターフェイスは、オブジェクトの項目を列挙する列挙子を提供するメソッドのみを指定します。そのため、オブジェクトの他の能力が何であるかについての情報はありません。そのため、アイテムの量が固定されているのか、可変なのか、外部から可変なのかさえわかりません。
これを提供する最初のインターフェイスは、ランダム アクセスに加えて、オブジェクトを追加するメソッドを提供するIListです。IList は読み取り専用である可能性があるため、IList を持っているからといって、それに書き込みアクセスできるわけではありません。辞書のようなオブジェクトの add メソッドを指定するIDictionaryもあります。他のすべての標準コレクションは、通常、この機能を提供するインターフェイスを実装していません。
したがって、その実装、または少なくともより具体的な実装の詳細 (IList または IDictionary) を知らずに、任意のコレクションに値を入力することはできません。
すべての機能をキャッチする必要はありません。ほとんどのインスタンスをカバーするものが必要なだけです。したがって、IEnumerable、ICollection、または IList が渡された場合は、リストを返すことができます。
IList<T>
またはのいずれかを取得する場合ICollection<T>
、IEnumerable<T>
(両方がそれを実装しているため) も取得するため、1 つのケースしかありません。IEnumerable を受け入れて、それに基づいてリストを作成するだけです。
public IList<T> CreateList<T> (IEnumerable<T> enumerable)
{
List<T> list = new List<T>(enumerable);
// add custom items
list.Add(GetCustomItem<T>());
return list;
}
<T>
必要に応じて、定義からすべての を削除するだけで、非ジェネリックなバージョンを作成することもできます。