ссылка, описывающая это поведение - лучший ответ IMO, upvote
чаю C # и пытаюсь понять лямбды. В приведенном ниже примере он распечатывается 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 получить копию вместо, как синтаксис C ++ 0x
[&](){ ... } // Capture by reference
против
[=](){ ... } // Capture copies