c# Action 问题,不明白输出为什么是这样?

    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变量。