C# 包含变量的匿名方法出错
我有以下方法。调用Writeline方法时,会出现缺少的结果。结果 第二行必须是真的,否则是假的,你能告诉我吗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
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
}