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

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

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

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

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

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

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


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

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

13   голосов , оценка 3.692 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы