我一直在學習C#,並且我正試圖理解lambda。在下面的這個例子中,它打印出10次10次。如何告訴lambda函數在C#中捕獲副本而不是參考?
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
您可能想要閱讀[本文](http://csharpindepth.com/Articles/Chapter5/Closures.aspx),由我們自己的Jon Skeet編寫。 – 2009-01-16 20:12:41
[C#捕獲變量循環]可能的重複(http://stackoverflow.com/questions/271440/c-sharp-captured-variable-in-loop) – nawfal 2013-11-02 06:35:41