Я только начал изучать лямбда-выражения и обнаружил, что поведение, которое, на мой взгляд, кажется не интуитивным. Я подозреваю, что не понял аспектов базовой концепции.
Итак, у нас есть эти два цикла for:
List > 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
В результате добавления Funcs к списку значение i обновляется для каждого ранее добавленного Func.
Почему это так?