Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menghalang Ungkapan Lambda daripada Menangkap Rujukan dalam C#?

Bagaimanakah Saya Boleh Menghalang Ungkapan Lambda daripada Menangkap Rujukan dalam C#?

Mary-Kate Olsen
Lepaskan: 2025-01-19 00:01:09
asal
171 orang telah melayarinya

How Can I Prevent Lambda Expressions from Capturing References in C#?

Mencegah Tangkapan Rujukan dalam C# Lambda Expressions

Ekspresi lambda C#, secara lalai, menangkap pembolehubah melalui rujukan. Ini bermakna ungkapan lambda mengekalkan penunjuk kepada pembolehubah asal dan sebarang perubahan pada pembolehubah itu selepas penciptaan lambda akan ditunjukkan apabila lambda dilaksanakan.

Berikut ialah contoh yang menggambarkan tingkah laku ini:

<code class="language-csharp">class Program
{
    delegate void Action();

    static void Main(string[] args)
    {
        List<Action> actions = new List<Action>();

        for (int i = 0; i < 10; i++)
            actions.Add(() => Console.WriteLine(i));

        foreach (Action a in actions)
            a();
    }
}</code>
Salin selepas log masuk

Melaksanakan kod ini akan mencetak "10" sepuluh kali. Ini berlaku kerana setiap lambda menangkap rujukan kepada pembolehubah tunggal i, yang nilainya ialah 10 pada masa gelung selesai.

Untuk mengelakkan tangkapan rujukan ini dan memastikan setiap lambda mendapat salinan nilai pembolehubah gelungnya sendiri, buat salinan setempat dalam gelung:

<code class="language-csharp">for (int i = 0; i < 10; i++)
{
    int copy = i; // Create a local copy
    actions.Add(() => Console.WriteLine(copy));
}</code>
Salin selepas log masuk

Kini, setiap lambda menangkap pembolehubah copy yang berbeza, mengekalkan nilai pada masa penciptaannya. Output akan memaparkan nombor 0 hingga 9 dengan betul.

Adalah penting untuk memahami bahawa tidak seperti beberapa bahasa lain (seperti C ), C# tidak menawarkan mekanisme langsung untuk menyatakan rujukan atau tangkapan nilai secara eksplisit dalam sintaks ungkapan lambda itu sendiri. Mencipta salinan tempatan ialah penyelesaian standard untuk mencapai semantik penangkapan nilai.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghalang Ungkapan Lambda daripada Menangkap Rujukan dalam C#?. 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