Como dizer a uma função lambda para capturar uma cópia em vez de uma referência em c #?
Eu tenho aprendido C # e estou tentando entender lambdas. Nesta amostra abaixo, ele imprime 10 dez vezes.
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();
}
}
Obviamente, a classe gerada atrás do lambda está armazenando uma referência ou ponteiro para oint i
variável e está atribuindo um novo valor à mesma referência toda vez que o loop itera. Existe uma maneira de forçar o lamda a pegar uma cópia, como a sintaxe C ++ 0x
[&](){ ... } // Capture by reference
vs.
[=](){ ... } // Capture copies