匿名方法中的错误包含变量
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
}
我有以下方法。当调用 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
}