Вход на сайт
Где найти старый компилятор для C# 4.0
821 просмотров
Перейти к просмотру всей ветки
в ответ MrSanders 15.03.19 16:37
Вроде кажется дошло, поправьте если неправильно.
Для использования локальных переменных в лямбде/анонимной функции делается как бы снимок всех требуемых переменных в специальном closure class который решили назвать DisplayClass
https://stackoverflow.com/questions/16401860/what-does-dis...
Если внутрь цикла вставить ненужный оператор присваивания, то компилятор создает closure class каждый раз внутри цикла и делает снимок. Без этого оператора closure class создается вне цикла и также делается снимок внутри цикла. То бишь имеем в одном случае 1 экземпляр с 10 присваиваниями в цикле , а в другом случае 10 экземпляров с одним присваиванием. closure class создается в месте "минимальной видимости" переменных.
for (int i = 0; i < 10; i++) { int tmp = i; Action action = delegate() { Console.WriteLine(tmp); }; actions.Add(action); }