이 코드를 고려하십시오.foreach와 list.ForEach() 사이의 클로저가 다른 점은 무엇입니까?
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 번을 768 번 인쇄합니다. 첫 번째 경우에는 왜 발생하지 않습니까? foreach
키워드가 방법 Foreach
과 다른 점은 무엇입니까? 단지 한 변수를 소개합니다 내가 values.ForEach
감사합니다. 쓰기 위해 +1. –