编译器正在做的是将您的lambda和lambda捕获的任何变量拉入编译器生成的嵌套类。
编译后,您的示例如下所示:
class Program{ delegate void Action(); static void Main(string[] args) { List<Action> actions = new List<Action>(); DisplayClass1 displayClass1 = new DisplayClass1(); for (displayClass1.i = 0; displayClass1.i < 10; ++displayClass1.i ) actions.Add(new Action(displayClass1.Lambda)); foreach (Action a in actions) a(); } class DisplayClass1 { int i; void Lambda() { Console.WriteLine(i); } }}通过在for循环中进行复制,编译器将在每次迭代中生成新对象,如下所示:
for (int i = 0; i < 10; ++i){ DisplayClass1 displayClass1 = new DisplayClass1(); displayClass1.i = i; actions.Add(new Action(displayClass1.Lambda));}


