Tangkapan Penutupan Tidak Konsisten C# 5.0: for
lwn. foreach
Isunya
C# 5.0 menambah baik penangkapan penutup dalam gelung foreach
, tetapi bukan dalam gelung for
. foreach
gelung kini menangkap nilai pembolehubah gelung dengan betul untuk setiap lelaran. for
gelung, walau bagaimanapun, mengekalkan gelagat lama, hanya menangkap nilai akhir pembolehubah gelung.
Soalan: Mengapa percanggahan ini?
Penjelasan:
Perbezaan berpunca daripada struktur asas gelung for
dan foreach
. Gelung foreach
secara semula jadi melelar ke atas koleksi, mencipta contoh baharu pembolehubah gelung untuk setiap elemen. Ini menjadikan tangkapan setiap lelaran yang konsisten menjadi mudah.
Gelung for
, sebaliknya, adalah lebih kompleks. Ia terdiri daripada pemula, syarat, lelaran dan badan. Pemula berjalan sekali sahaja, mencipta pembolehubah gelung tunggal. Nilai pembolehubah gelung tidak terikat secara intrinsik pada setiap lelaran; ia boleh dimanipulasi secara bebas dalam badan gelung.
Pertimbangkan:
<code class="language-csharp">for (int i = 0, j = 10; i < 5; i++, j--) { Console.WriteLine(i, j); }</code>
Jika pembolehubah gelung i
ditangkap pada setiap lelaran, gelagat itu akan menjadi tidak dapat diramalkan dan berkemungkinan samar-samar disebabkan oleh pengubahsuaian bebas j
. Tingkah laku yang konsisten untuk menangkap nilai akhir i
memberikan hasil yang jelas dan boleh diramal. Ini mengelak daripada memperkenalkan kerumitan yang tidak dijangka dan potensi pepijat. Oleh itu, walaupun nampaknya tidak konsisten, pengendalian yang berbeza dalam C# 5.0 mencerminkan perbezaan struktur yang wujud antara jenis gelung dan bertujuan untuk tingkah laku yang jelas dan boleh diramal dalam setiap kes.
Atas ialah kandungan terperinci Mengapa C# 5.0 Tidak Membetulkan Gelagat Penutupan yang Dirakam untuk Gelung `untuk` Seperti yang Dilakukan untuk Gelung `foreach`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!