Не первый раз встречаю подобный пример кода в сети:
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. Кто может объяснить подобное поведение либо хотя дать ссылку на мануалы, где это разъясняется?
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости