Работа с делегатом Action - C#

Узнай цену своей работы

Формулировка задачи:

Добрый вечер. Подскажите пожалуйста разницу работы приведенных ниже примеров:
using System;
 
namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Action[] actions = new Action[3];
 
            for (int i = 0; i < 3; i++)
            {
                int loopScopedi = i;
                actions[i] = () => Console.Write(loopScopedi);
            }
 
            foreach (Action a in actions) a();
 
            Console.ReadLine();
        }
    }
}
using System;
 
namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Action[] actions = new Action[3];
 
            for (int i = 0; i < 3; i++)
            {
                actions[i] = () => Console.Write(i);
            }
 
            foreach (Action a in actions) a();
 
            Console.ReadLine();
        }
    }
}
Почему при использовании в цикле переменной, считывающей значение переменной-счетчика элементам массива делегата Action присваиваются значения равные переменной-счетчику, но если в цикле не использовать лишних переменных и в лямбда-выражении передавать переменную-счетчик, то значения элементов равны последнему значению переменной-счетчика?

Решение задачи: «Работа с делегатом Action»

textual
Листинг программы
public void SomeMethodName123() { ... }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5
Похожие ответы