上記のタイトルの通りの質問です。例えば
IEnumerable<T> items = new T[]{new T("msg")};
items.ToList().Add(new T("msg2"));
しかし、結局のところ、内部には 1 つのアイテムしかありません。items.Add(item)
のようなメソッドを持つことはできますかList<T>
?
ベストアンサー1
できません。 はIEnumerable<T>
必ずしもアイテムを追加できるコレクションを表すわけではないからです。 実際、 は必ずしもコレクションを表すわけではありません。 たとえば、次のようになります。
IEnumerable<string> ReadLines()
{
string s;
do
{
s = Console.ReadLine();
yield return s;
} while (!string.IsNullOrEmpty(s));
}
IEnumerable<string> lines = ReadLines();
lines.Add("foo") // so what is this supposed to do??
ただし、新しい オブジェクト (型は指定されていません)を作成しIEnumerable
、列挙すると、古いオブジェクト内のすべての項目と独自の項目の一部が提供されます。そのためには、次のコードを使用しますEnumerable.Concat
。
items = items.Concat(new[] { "foo" });
これによって配列オブジェクトは変更されません(いずれにしても、配列に項目を挿入することはできません)。ただし、配列内のすべての項目をリストし、その後に「Foo」をリストする新しいオブジェクトが作成されます。さらに、その新しいオブジェクトは配列の変更を追跡します(つまり、列挙するたびに、項目の現在の値が表示されます)。