これらは異なるタイプのオブジェクトであり、実際のクラスであるのIEnumerable
に対し、インターフェイス(インスタンス自体ではなく、一部の機能のスキーマ)です。List
どちらか一方を使用することには、ある種の「利点」があります。
より柔軟にしたいメソッドを作成していて、オブジェクトを列挙するだけでよい場合は、を使用しますIEnumerable
。
List
を実装し、、および他の多くのクラスとIEnumerable
同様に、そのように扱うことができます。Collection
これを例に取ってください:
public void OutputEnumerable(IEnumerable<string> strings)
{
foreach (string s in strings)
Console.WriteLine(s);
}
public void OutputList(List<string> strings)
{
foreach (string s in strings)
Console.WriteLine(s);
}
次に、このデータがあります。
List<string> stringList = new List<string>(new [] { "a", "b", "c" });
Collection<string> stringCol = new Collection<string>(new [] { "a", "b", "c" });
IEnumerable<string> stringEn = new [] { "a", "b", "c" };
これらはすべて機能します:
OutputEnumerable(stringList);
OutputEnumerable(stringCol);
OutputEnumerable(stringEn);
OutputList(stringList);
そして、これらはしません:
OutputList(stringCol);
OutputList(stringEn);