static List<Action> CreateCountingActions()
{
List<Action> actions = new List<Action>();
int outerCounter = 0;
for (int i = 0; i < 2; i++)
{
int innerCounter = 0;
Action action = () =>
{
Console.WriteLine("Outer: {0}; Inner: {1}", outerCounter, innerCounter);
outerCounter++;
innerCounter++;
};
actions.Add(action);
}
return actions;
}
static void Main(string[] args)
{
List<Action> actions = CreateCountingActions();
actions[0]();
actions[0]();
actions[1]();
actions[1]();
}
这个和你使用的编译器有关系。
https://blog.csdn.net/caca95/article/details/52902969
这样是因为变量的作用域不同,outerCounter在for循环外所以对整个循环来说就是一个变量,但是innerCounter在循环里面,每次进入循环就会创建一个初始值为0的innerCounter变量。