Передача примитивного типа в делегат

187
24 декабря 2019, 05:30

Не первый раз встречаю подобный пример кода в сети:

 delegate void Function() ;
public static void Main(string[] args)
{
     List<Function> functions = new List<Function>() ;
    for(int i=0;i<10;i++){
           functions.Add(delegate{
                  Console.WriteLine(i);
            }) ;
     }
     functions[0]();
   } 

В список методов добавляется новый метод, выводящий в консоль значение локальной переменной i. Её область видимости - цикл for. За ним по всем правилам языка, которые я знаю, она перестаёт существовать. По идее, в создаваемую функцию должно передаться её значение. Но судя по поведению, i остаётся ссылкой на изначальное определение в цикле. В итоге результат выполнения кода равен 10. Кто может объяснить подобное поведение либо хотя дать ссылку на мануалы, где это разъясняется?

READ ALSO
Подключение к удаленной БД без MySql

Подключение к удаленной БД без MySql

В моем учебном заведении нет MySql, а лишь стандартные библиотекиКаким образом можно подключиться к удаленной БД на хосте, используя стандартные...

197
Ошибка под отладкой `The name &#39;t&#39; doe not exist in current context`

Ошибка под отладкой `The name 't' doe not exist in current context`

Столкнулся с проблемой, что под отладкой не могу посмотреть содержимое переменных, например List<int> t1 int[] t2 и int t3Сообщается ошибка: The name 't' doe not exist in current...

183
Звук в зависимости от объекта. Vuforia

Звук в зависимости от объекта. Vuforia

Как в Unity вызывать действие, если камера направляется на некий обьект (например ImageTarget)?

176
LARAVEL | Как обновить значение в промежуточной таблице

LARAVEL | Как обновить значение в промежуточной таблице

Имеется таблица следующего типа:

220