코드의 조각을 봐루프 내부 대표는 지역 및 루프 변수의 차이를 이해하는 방법
List<Action> actions = new List<Action>();
for (int variable = 0; variable < 5; ++variable)
{
int myLocalVariable = variable;
actions.Add(() => Console.WriteLine(myLocalVariable));
}
actions.ForEach(s => s.Invoke());
Console.ReadLine();
출력은 내가 생각하는 경향이 IL 코드를 보면 0 1 2 3 4
입니다 이 컴파일러는 myLocalVariable 인스턴스를 하나만 만듭니다. 이 사실은 또한 루프 내에서 지역 변수를 사용하는 것이 좋습니다.
그래서 내부에서 위임 한 actions.Add()는 루프 변수의 "최신"버전을 저장합니다.
ok, 익명 함수가 로컬 인스턴스 변수 (myLocalVariable)의 값을 캡처하고 해당 값의 복사본을 내부적으로 저장합니다.이 경우 루프 변수의 값 복사본을 저장할 수 있습니다. , 익명 함수 로컬 변수 VS 루프 변수의 차이점은 무엇입니까 @JonSkeet –
@VladimirGabrielyan : 아니요, 루프 변수가 'for'루프에 대해서만 한 번만 인스턴스화되도록 지정 되었기 때문에 아니요. 'foreach' 루프의 경우, 한번 인스턴스화하기 위해 * 사용되었지만 C# 5에서 고정되어 반복마다 인스턴스화됩니다. –