Apabila bekerja dengan IEnumerable, prinsip asasnya ialah penilaian malas, di mana unsur-unsur diambil hanya apabila dan apabila diperlukan. Walau bagaimanapun, kadangkala kita mungkin mendapati diri kita berada dalam situasi di mana kita perlu mengetahui bilangan item dalam koleksi tanpa mengulanginya.
Pertimbangkan coretan kod berikut:
private IEnumerable<string> Tables { get { yield return "Foo"; yield return "Bar"; } }
Jika kita ingin mengulangi koleksi ini dan memaparkan kemajuan sebagai "memproses #n #m", bagaimana kita boleh menentukan nilai m tanpa berulang?
Had IEnumerable
Malangnya, ini tidak boleh dilakukan dengan IEnumerable. Dengan reka bentuk, ia beroperasi dengan malas, hanya menghasilkan elemen apabila diminta. Menentukan jumlah kiraan terlebih dahulu akan memerlukan traversal pendahuluan, mengalahkan tujuan penilaian malas.
ICCollection to the Rescue
Jika mengetahui kiraan tanpa lelaran adalah penting, pertimbangkan menggunakan ICollection sebaliknya. ICollection ialah antara muka yang mewakili koleksi yang boleh memberikan maklumat tentang kandungannya. Ia termasuk sifat Count yang mengembalikan bilangan elemen dalam koleksi.
private ICollection<string> Tables { get { return new List<string> { "Foo", "Bar" }; } } int count = Tables.Count;
Dengan menghantar Jadual ke Senarai
Kesimpulannya, sementara IEnumerable bersinar kerana kecekapannya dalam penilaian malas, kekurangan maklumat kiraan awal boleh menjadi had. Untuk senario di mana mengetahui kiraan terlebih dahulu adalah penting, pertimbangkan untuk menggunakan ICollection sebaliknya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Kiraan IEnumerable Tanpa Mengulangkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!