Работа с делегатом 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() { ... }

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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