2013-08-15 3 views
0

은 그럼이 코드가 있다고 가정 해 보자 만들 때 로컬 변수 상태를 유지 : 대의원의 모든 "I"s는 지적 때문에 출력은대리인이

4 
4 
4 
4 

될 것

Func<int>[] list = new Func<int>[4]; 
for (int i = 0; i < 4; ++i) 
{ 
    list[i] = delegate 
    { 
     return i; 
    }; 
} 

foreach (var f in list) Console.WriteLine(f()); 

같은 변수에요.

대리인이 만들어 졌을 때의 상태를 유지할 수있는 방법이 있습니까?

답변

1

루프 내에서 별도의 변수를 선언해야 각 대리자가 해당 클로저의 자체 복사본을 참조 할 수 있습니다.

+0

안녕하세요. 그게 효과가있어! 그건 그렇고, 내 코드는 자바 스크립트 동등 물을 쓸 때 내가 원하는 것을 수행한다. 이 두 언어가 서로 다르게 행동하는 이유는 무엇입니까? –

+0

이것을 읽으십시오. http://stackoverflow.com/a/2639032/425871 – Steve

+0

@LukaHorvat 자바 스크립트 코드는 값이 아닌 변수를 캡처해야하기 때문에 게시해야합니다. 색인 변수를 재사용하고 있습니까? 변수는 javascript에서 블록 범위가 아닌 함수 범위를가집니다. –

관련 문제