我一直在学习C#,我正在努力理解lambdas.在下面的示例中,它打印出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();
}
}
Run Code Online (Sandbox Code Playgroud)
显然,lambda后面生成的类正在存储一个引用int i变量的引用或指针,并且每次循环迭代时都会为同一个引用分配一个新值.有没有办法强制lamda获取副本,比如C++ 0x语法
[&](){ ... } // Capture by reference
Run Code Online (Sandbox Code Playgroud)
与
[=](){ ... } // Capture copies
Run Code Online (Sandbox Code Playgroud)