Rumah > pembangunan bahagian belakang > C++ > Mengapa C# 5.0 Tidak Membetulkan Gelagat Penutupan yang Dirakam untuk Gelung `untuk` Seperti yang Dilakukan untuk Gelung `foreach`?

Mengapa C# 5.0 Tidak Membetulkan Gelagat Penutupan yang Dirakam untuk Gelung `untuk` Seperti yang Dilakukan untuk Gelung `foreach`?

Barbara Streisand
Lepaskan: 2025-01-07 19:22:42
asal
153 orang telah melayarinya

Why Didn't C# 5.0 Fix Captured Closure Behavior for `for` Loops Like It Did for `foreach` Loops?

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan