我一直在学习 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();
}
}
显然,在 lambda 后面生成的类存储了一个引用或指向int i
变量的指针,并且每次循环迭代时都会为同一个引用分配一个新值。有没有办法强制 lamda 获取副本,例如 C++0x 语法
[&](){ ... } // Capture by reference
对比
[=](){ ... } // Capture copies