我一直在学习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
https://stackoverflow.com/questions/451779
复制相似问题