Dalam C#, apabila menentukan operasi dalam kitaran, pastikan anda memberi perhatian kepada tingkah laku penangkapan berubah. Secara lalai, semua operasi menangkap pemboleh ubah yang sama, menyebabkan hasil output tidak memenuhi yang diharapkan ketika memanggil.
sila pertimbangkan contoh berikut:
output yang dijangkakan kod ini ialah 0, 2, 4, 6, dan 8. Walau bagaimanapun, output sebenar adalah lima 10. Ini kerana semua operasi mengutip pemboleh ubah yang sama
List<Action> actions = new List<Action>(); int variable = 0; while (variable < 5) { actions.Add(() => Console.WriteLine(variable * 2)); ++variable; } foreach (var act in actions) { act.Invoke(); }
variable
Untuk mengelakkan masalah ini dan pastikan setiap contoh operasi mempunyai pemboleh ubah tangkapan sendiri, anda perlu menyalin pembolehubah dalam kitaran:
melalui salinan pembolehubah tempatan, setiap operasi menangkap nilai uniknya sendiri, untuk mendapatkan output yang diharapkan 0, 2, 4, 6, 8.
while (variable < 5) { int copy = variable; actions.Add(() => Console.WriteLine(copy * 2)); ++variable; }
Konsep penangkapan pembolehubah ini adalah penting untuk memahami penutupan C#. Apabila menentukan operasi dalam kitaran, pastikan anda mempertimbangkan kitaran hayat pembolehubah dan kebolehaksesannya.
Atas ialah kandungan terperinci Mengapa tindakan gelung C# menangkap pembolehubah yang sama, dan bagaimanakah ini dapat dielakkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!