Я изучаю С#, и я пытаюсь понять лямбда. В этом примере ниже он печатает 10 десять раз.
class Program
{
delegate void Action();
static void Main(string[] args)
{
List<Action> actions = new List<Action>();
for (int i = 0; i < 10; ++i )
actions.Add(()=>Console.WriteLine(i));
foreach (Action a in actions)
a();
}
}
Очевидно, что сгенерированный класс за лямбдой хранит ссылку или указатель на переменную int i
и присваивает новое значение той же ссылке каждый раз, когда цикл повторяется. Есть ли способ заставить lamda захватить копию вместо этого, как синтаксис С++ 0x
[&](){ ... } // Capture by reference
против.
[=](){ ... } // Capture copies