Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 包含变量的匿名方法出错_C#_Anonymous Methods - Fatal编程技术网

C# 包含变量的匿名方法出错

C# 包含变量的匿名方法出错,c#,anonymous-methods,C#,Anonymous Methods,我有以下方法。调用Writeline方法时,会出现缺少的结果。结果 第二行必须是真的,否则是假的,你能告诉我吗 public static void IsGreater() { var biggerThanNumber = new Predicate<int>[10]; for (int index = 0; index < biggerThanNumber.Length; ++index) { big

我有以下方法。调用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
    }
publicstaticvoid更大()
{
var biggerThanNumber=新谓词[10];
for(int index=0;indexvalue>index;
}
Console.WriteLine(biggerThanNumber[5](20));//True
Console.WriteLine(biggerThanNumber[5](6));//False
}

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

publicstaticvoid更大()
{
var biggerThanNumber=新谓词[10];
for(int index=0;indexvalue>localCopy;
}
Console.WriteLine(biggerThanNumber[5](20));//True
Console.WriteLine(biggerThanNumber[5](6));//True
}

不清楚您的问题是什么。请提供:输入。预期产出。真正的输出。@Christopher OP问题似乎很清楚,因为lambda表达式捕获了循环变量
    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
    }