【发布时间】:2018-07-03 08:31:57
【问题描述】:
我刚刚开始接触 Lambda-Expressions,并发现了一种对我来说似乎不直观的行为。我怀疑我还没有理解基本概念的各个方面。
所以我们有这两个 for 循环:
列表> list = new List>();
for (int i = 0; i < 5; i++)
{
list.Add(j => j + i);
}
for (int i = 0; i < 5; i++)
{
Console.WriteLine(list[i](i));
}
我原本期望的输出是这样的:
0(因为 j+0 且 j=0 等于 0)
2(因为 j+1 且 j=1 等于 2)
4 (…)
6
8
而是输出显示:
5(我怀疑 j+5 和 j=0 等于 5)
6(我怀疑 j+5 和 j=1 等于 6)
7 (…)
8
9
如果将 Func 添加到 List 中,则会为每个先前添加的 Func 更新 i 值。
为什么会这样?
【问题讨论】:
标签: c# loops for-loop lambda func