Рассмотрим этот код.
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