Я натолкнулся на самое неожиданное поведение. Я уверен, что есть веская причина, по которой это работает. Может кто-нибудь объяснить это?
Рассмотрим этот код:
var nums = new int[] { 1, 2, 3, 4 };
var actions = new List<Func<int>>();
foreach (var num in nums)
{
actions.Add(() => num);
}
foreach (var num in nums)
{
var x = num;
actions.Add(() => x);
}
foreach (var action in actions)
{
Debug.Write(action() + " ");
}
Результат для меня немного удивителен:
4 4 4 4 1 2 3 4
Очевидно, что что-то происходит с тем, как лямбда ссылается на счетчик. В первой версии foreach есть 'num', фактически связанный с 'Current', вместо результата, возвращаемого им?