Saya ingin membuat contoh baru dari sebuah objek IEnumerable<object>
Bolehkah saya melakukan ini
IEnumerable<object> a = new IEnumerable<object>();
Saya ingin membuat contoh baru dari sebuah objek IEnumerable<object>
Bolehkah saya melakukan ini
IEnumerable<object> a = new IEnumerable<object>();
IEnumerable<T>. Anda harus menggunakan sesuatu seperti List<T>.
IEnumerable<T>tidak mewakili sebuah iterator - itu mewakili urutan yang dapat diulang . IEnumerator<T>itu sendiri mewakili iterator.
Jawaban:
Misalnya, Anda dapat membuat instance dari List<object>, yang mengimplementasikan IEnumerable<object>. Contoh:
List<object> list = new List<object>();
list.Add(1);
list.Add(4);
list.Add(5);
IEnumerable<object> en = list;
CallFunction(en);
IEnumerable<T>adalah ide yang buruk IMO.
Karena Anda sekarang menentukan ingin menambahkannya, apa yang Anda inginkan bukanlah yang sederhana IEnumerable<T>tetapi setidaknya ICollection<T>. Saya merekomendasikan hanya menggunakan List<T>seperti ini:
List<object> myList=new List<object>();
myList.Add(1);
myList.Add(2);
myList.Add(3);
Anda dapat menggunakan myList di mana pun yang IEnumerable<object>diharapkan, sejak List<object>implementasi IEnumerable<object>.
(jawaban lama sebelum klarifikasi)
Anda tidak dapat membuat instance IEnumerable<T>karena ini adalah antarmuka normal (Terkadang mungkin untuk menentukan implementasi default, tetapi biasanya hanya digunakan dengan COM).
Jadi yang Anda inginkan adalah membuat instance kelas yang mengimplementasikan antarmuka IEnumerable<T> . Perilakunya bervariasi bergantung pada kelas yang Anda pilih.
Untuk penggunaan urutan kosong:
IEnumerable<object> e0=Enumerable.Empty<object>();
Untuk enumerable yang tidak kosong, Anda dapat menggunakan beberapa collection yang mengimplementasikan IEnumerable<T>. Pilihan umum adalah larik T[], List<T>atau jika Anda menginginkan kekekalan ReadOnlyCollection<T>.
IEnumerable<object> e1=new object[]{1,2,3};
IEnumerable<object> e2=new List<object>(){1,2,3};
IEnumerable<object> e3=new ReadOnlyCollection(new object[]{1,2,3});
Cara umum lainnya untuk mengimplementasikan IEnumerable<T>adalah fitur iterator yang diperkenalkan di C # 3:
IEnumerable<object> MyIterator()
{
yield return 1;
yield return 2;
yield return 3;
}
IEnumerable<object> e4=MyIterator();
Solusi lain adalah menggunakan Empty.
IEnumerable<object> a = Enumerable.Empty<object>();
ada utas tentang SO: Apakah lebih baik menggunakan Enumerable.Empty () daripada List baru untuk menginisialisasi IEnumerable?
Tidak, Anda tidak bisa sejak itu IEnumerableadalah antarmuka.
Anda harus dapat membuat instance kosong dari sebagian besar jenis non-antarmuka yang diimplementasikan IEnumerable, misalnya: -
IEnumerable<object> a = new object[] { };
atau
IEnumerable<object> a = new List<object>();
Tidak, Anda tidak bisa melakukan itu. Gunakan baris kode berikut sebagai gantinya:
IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
Saya harap ini membantu.
Saya ingin membuat objek atau daftar baru yang dapat dihitung dan dapat menambahkannya.
Komentar ini mengubah segalanya. Anda tidak dapat menambahkan ke generik IEnumerable<T>. Jika Anda ingin tetap menggunakan antarmuka di System.Collections.Generic, Anda perlu menggunakan kelas yang mengimplementasikan ICollection<T>seperti List<T>.
Tidak ada IEnumerable adalah antarmuka, Anda tidak dapat membuat contoh antarmuka
Anda bisa melakukan sesuatu seperti ini
IEnumerable<object> a = new object[0];
new SomeComInterface()membuat instance "CoClass" yang terkait dengan antarmuka daripada membuat instance antarmuka itu sendiri?
newantarmuka dalam situasi tertentu.
Kamu bisa melakukan ini:
IEnumerable<object> list = new List<object>(){1, 4, 5}.AsEnumerable();
CallFunction(list);