Rumah >pembangunan bahagian belakang >C++ >Menangkap Salinan atau Rujukan dalam C# Lambdas: Bilakah Anda Harus Memilih Yang Mana?
Apabila mentakrifkan ungkapan lambda dalam C#, adalah penting untuk memahami cara ia berinteraksi dengan pembolehubah luaran. Secara lalai, ungkapan lambda cenderung untuk menangkap rujukan kepada pembolehubah luaran. Walau bagaimanapun, dalam beberapa kes adalah penting untuk memaksa mereka menyalin pembolehubah ini.
Pertimbangkan contoh berikut, yang direka untuk mencetak satu siri nombor menggunakan ungkapan Lambda dan gelung:
<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>
Walau bagaimanapun, coretan kod di atas mencetak "10" berulang kali, menunjukkan bahawa ungkapan Lambda menangkap rujukan kepada pembolehubah kongsi i. Walaupun nilai i berubah semasa gelung, ungkapan lambda sentiasa mencetak nilai akhir i, iaitu 10.
Untuk memaksa ungkapan lambda menangkap salinan pembolehubah dan bukannya rujukan, satu penyelesaian adalah dengan membuat salinan setempat pembolehubah di dalam gelung:
<code class="language-csharp">for (int i = 0; i < 10; i++) { int copy = i; // 创建局部副本 actions.Add(() => Console.WriteLine(copy)); }</code>
Dengan menyalin nilai i ke salinan pembolehubah baharu, ungkapan Lambda secara berkesan menangkap nilai i pada masa dan skop tertentu. Ini memastikan bahawa ungkapan lambda mencetak nombor yang betul pada setiap lelaran gelung.
Memahami tingkah laku ini adalah penting untuk menggunakan ungkapan lambda dalam C#. Ia membolehkan pembangun mengawal cara ekspresi lambda berinteraksi dengan pembolehubah yang dikongsi dan memastikan program berjalan seperti yang diharapkan.
Atas ialah kandungan terperinci Menangkap Salinan atau Rujukan dalam C# Lambdas: Bilakah Anda Harus Memilih Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!