我不能够很清晰地理解两个代码块之间的区别。考虑下面这个程序:
class Program
{
static void Main(string[] args)
{
List<Number> numbers = new List<Number>
{
new Number(1),
new Number(2),
new Number(3)
};
List<Action> actions = new List<Action>();
foreach (Number numb in numbers)
{
actions.Add(() => WriteNumber(numb));
}
Number number = null;
IEnumerator<Number> enumerator = numbers.GetEnumerator();
while (enumerator.MoveNext())
{
number = enumerator.Current;
actions.Add(() => WriteNumber(number));
}
foreach (Action action in actions)
{
action();
}
Console.ReadKey();
}
public static void WriteNumber(Number num)
{
Console.WriteLine(num.Value);
}
public class Number
{
public int Value;
public Number(int i)
{
this.Value = i;
}
}
}
输出结果为:
1
2
3
3
3
3
这两个代码块应该是一样的。但你可以看到闭包在第一个循环中不起作用。我缺少什么?提前致谢。
foreach
闭包问题吗?(https://dev59.com/v3RB5IYBdhLWcg3wyqEd) - sircodesalotforeach
表现得很明智。 - Jon Skeet