Рассмотрим этот код.
var values = new List<int> {123, 432, 768};
var funcs = new List<Func<int>>();
values.ForEach(v=>funcs.Add(()=>v));
funcs.ForEach(f=>Console.WriteLine(f()));//prints 123,432,768
funcs.Clear();
foreach (var v1 in values)
{
funcs.Add(()=>v1);
}
foreach (var func in funcs)
{
Console.WriteLine(func()); //prints 768,768,768
}
Я знаю, что второй foreach выводит 768 3 раза из-за закрывающей переменной, захваченной лямбда. почему этого не происходит в первом случае? Чем ключевое слово foreach
отличается от метода Foreach
? Это потому, что выражение вычисляется, когда я делаю values.ForEach