Anda tidak bisa, karena IEnumerable<T>
tidak selalu mewakili koleksi yang itemnya dapat ditambahkan. Bahkan, itu tidak selalu mewakili koleksi sama sekali! Sebagai contoh:
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??
Apa yang dapat Anda lakukan, bagaimanapun, adalah membuat objek baru IEnumerable
(dari tipe yang tidak ditentukan), yang, ketika disebutkan, akan menyediakan semua item dari yang lama, ditambah beberapa milik Anda sendiri. Anda gunakan Enumerable.Concat
untuk itu:
items = items.Concat(new[] { "foo" });
Ini tidak akan mengubah objek array (toh, Anda tidak bisa memasukkan item ke array). Tapi itu akan membuat objek baru yang akan mendaftar semua item dalam array, dan kemudian "Foo". Selain itu, objek baru itu akan melacak perubahan dalam array (yaitu, setiap kali Anda menghitungnya, Anda akan melihat nilai item saat ini).
IEnumerable<T>
dimaksudkan untuk menanyakan koleksi saja. Ini adalah tulang punggung kerangka kerja LINQ. Ini selalu merupakan abstraksi dari beberapa koleksi lain sepertiCollection<T>
,List<T>
, atauArray
. Antarmuka hanya menyediakanGetEnumerator
metode yang mengembalikan instanceIEnumerator<T>
yang memungkinkan berjalannya koleksi yang diperluas satu per satu. Metode ekstensi LINQ dibatasi oleh antarmuka ini.IEnumerable<T>
dirancang untuk dibaca hanya karena dapat mewakili agregasi bagian dari beberapa koleksi.