匿名方法中的错误包含变量

Error in Anonymous Method contained variable

我有以下方法。当调用 Writeline 方法时,会出现丢失的结果。的结果 第二个 Writeline 必须为真,否则为假,你能告诉我吗?

    public static void IsGreater()
    {
       var biggerThanNumber = new Predicate<int>[10];
       for (int index = 0; index < biggerThanNumber.Length; ++index)
       {
         biggerThanNumber[index] = value => value > index; 
       }
       Console.WriteLine(biggerThanNumber[5](20)); //True
       Console.WriteLine(biggerThanNumber[5](6));  //False
    }

更改将循环变量复制到本地引用的方法以避免循环中的 lambda 闭包问题。在您的方法中,索引值始终为 10,因此第二个控制台返回 false。有关更多信息,请查看此 post

    public static void IsGreater()
    {
        var biggerThanNumber = new Predicate<int>[10];
        for (int index = 0; index < biggerThanNumber.Length; ++index)
        {
            int localCopy = index;
            biggerThanNumber[index] = value => value > localCopy;
        }
        Console.WriteLine(biggerThanNumber[5](20)); //True
        Console.WriteLine(biggerThanNumber[5](6));  //True
    }