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