ссылка, описывающая это поведение - лучший ответ 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

Ответы на вопрос(0)

Ваш ответ на вопрос