dalam .net,
dan adalah dua struktur data asas yang menunjukkan urutan objek. Kedua -duanya boleh digunakan bersama -sama dengan formula ekspresi LINQ (integrasi bahasa) untuk melakukan penukaran data dan pengagregatan, tetapi mereka berbeza dari segi tingkah laku dan ciri -ciri prestasi. IEnumerable
List
tingkah laku entrectional
adalah antara muka yang mentakrifkan tingkah laku urutan elemen berulang. Ia menyediakan kaedah , yang mengembalikan objek antara muka . Apabila anda mengulangi koleksi , penghantar melintasi satu elemen pada satu masa.
Dalam kod kod yang anda berikan, jenis IEnumerable
pembolehubah adalah GetEnumerator()
. Apabila anda debug dan menyemaknya, anda akan melihat ahli -ahli seperti "Inner" dan "Luar". Ahli -ahli ini adalah sebahagian daripada pelaksanaan dalaman Linq dan saluran paip pertanyaan yang mendasari. IEnumerator
IEnumerable
"Inner" ahli biasanya termasuk hasil pertengahan dari ekspresi Linq sebelum permohonan penukaran atau screenter selanjutnya. Ia amat berguna untuk pertanyaan debugging kompleks.
Langkah berjaga -jaga prestasi sel
IEnumerable<animal>
List<animal>
Dari segi prestasi, biasanya menyediakan keupayaan fleksibiliti dan pengoptimuman yang lebih baik. Ekspresi Linq ditangguhkan, yang bermaksud bahawa mereka hanya boleh dilaksanakan apabila anda menghitung urutan. Ini membolehkan pengkompil dan pengoptimuman pertanyaan yang dijalankan dan penilaian tertunda di latar belakang.
untuk menukar
keuntuk memaksa pertanyaan dengan segera dan memuatkan semua hasil ke memori. Jika anda perlu mengakses data beberapa kali, ini mungkin lebih cekap kerana ia menghapuskan perbelanjaan pendua. Secara umumnya, apabila anda hanya perlu melelehkan urutan dan ingin menggunakan penilaian kelewatan, disarankan untuk menggunakan
. Jika anda perlu mengakses data beberapa kali atau anda perlu menyimpannya dalam struktur data statik, ia boleh ditukar kepada untuk meningkatkan prestasi. IEnumerable
Contoh spesifik
.ToList()
IEnumerable
Kod yang anda sediakan menunjukkan cara menggunakan List
untuk melakukan pertanyaan pangkalan data yang lebih efisien. Dengan mengekalkan pertanyaan awal (allSpotted ()) sebagai
dan IEnumerable
untuk menyaringnya tanpa melakukan keseluruhan pertanyaan beberapa kali. List
Atas ialah kandungan terperinci IEnumerable vs. List di Linq: Bilakah saya harus menggunakan masing -masing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!