C# 5.0의 클로저 캡처(루프 변수)
질문:
C# 5.0에서는 foreach 루프의 클로저 캡처 문제가 해결되어 루프 변수의 올바른 값이 캡처됩니다. 그러나 for 루프에는 여전히 동일한 문제가 존재합니다. 두 가지 유형의 루프 모두에서 이 문제가 해결되지 않는 이유는 무엇입니까?
정답:
for 루프의 기존 동작은 논리적으로 타당합니다. foreach 루프는 각 반복마다 새 변수를 선언하는 것과 유사하지만 for 루프에는 초기화 프로그램, 조건, 반복기 및 본문을 포함하는 고유한 구조가 있습니다.
for 루프의 초기화는 한 번만 실행되므로 "변수 인스턴스화"를 한 번만 수행하는 것이 논리적입니다. 또한 각 루프 반복에 대한 변수의 "초기" 값에 대한 고유한 가정이 없습니다.
다음 예를 고려해 보세요.
<code class="language-C#">for (int i = 0, j = 10; i < 5; i++, j--) { Action action = () => Console.WriteLine(i, j); action(); }</code>
이 경우 for 루프에 대해 이 문제를 해결하면 해당 동작을 판단하기 어려울 것입니다.
위 내용은 C# 5.0의 캡처된 클로저 수정이 For 루프에 적용되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!