foreach
Gelung dalam C#: Amalan TerbaikWalaupun versi C# .NET 4.0 dan yang lebih baru tidak membuang pengecualian apabila mengubah suai enumerable di dalam gelung foreach
, penambahan terus item dalam gelung boleh membawa kepada tingkah laku yang tidak dapat diramalkan. Artikel ini meneroka kaedah yang cekap dan boleh dipercayai untuk menambahkan item pada senarai semasa lelaran.
Pendekatan biasa menggunakan IList
sementara sebagai penimbal berfungsi, tetapi tidak selalu merupakan penyelesaian yang paling cekap atau elegan. Isu teras berpunca daripada sifat koleksi yang tidak berubah yang diakses melalui foreach
. Seperti yang dijelaskan oleh MSDN: foreach
direka untuk mendapatkan semula data; menambah atau mengalih keluar elemen semasa lelaran adalah tidak digalakkan kerana kemungkinan ketidakkonsistenan.
Mengapa Elakkan Pengubahsuaian Terus dalam foreach
?
Gelung foreach
berulang pada petikan keadaan koleksi pada permulaan gelung. Menambah item secara langsung mengubah suai koleksi asas, yang berpotensi menyebabkan lelaran melangkau elemen atau menghadapi pengecualian yang tidak dijangka.
Pendekatan Disyorkan: Menggunakan for
Gelung
Untuk menambah atau mengalih keluar item semasa mengulang, gelung for
menyediakan penyelesaian yang paling boleh diramal dan cekap. Ia menawarkan kawalan langsung ke atas indeks dan membenarkan pengubahsuaian yang selamat.
Koleksi Serentak: Kes Istimewa
Penggunaan koleksi serentak (seperti ConcurrentBag
atau ConcurrentQueue
) adalah pengecualian. Koleksi ini direka bentuk untuk pengubahsuaian selamat benang dan menambah item semasa lelaran mungkin dibenarkan, tetapi ini harus dipertimbangkan dengan teliti dan hanya digunakan apabila keselamatan benang adalah yang paling penting.
Ringkasnya, walaupun secara teknikal mungkin untuk menambah item semasa gelung foreach
dalam versi C# yang lebih baharu, secara amnya amalan terbaik menggunakan gelung for
untuk tujuan ini untuk mengekalkan kejelasan kod, kecekapan dan mengelakkan hasil yang tidak dijangka. Koleksi serentak menyediakan alternatif untuk senario berbilang benang tertentu.
Atas ialah kandungan terperinci Bagaimanakah saya dapat menambah item ke senarai semasa gelung C# `foreach`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!