C# 5.0의 일관되지 않은 클로저 캡처: for
대 foreach
이슈
C# 5.0은 foreach
루프의 클로저 캡처를 개선했지만 for
루프에서는 그렇지 않았습니다. foreach
이제 루프는 각 반복에 대해 루프 변수의 값을 올바르게 캡처합니다. for
그러나 루프는 이전 동작을 유지하여 루프 변수의 최종 값만 캡처합니다.
질문: 왜 이러한 불일치가 발생합니까?
설명:
차이점은 for
과 foreach
루프의 기본 구조에서 비롯됩니다. foreach
루프는 본질적으로 컬렉션을 반복하여 각 요소에 대한 루프 변수의 새 인스턴스를 생성합니다. 이를 통해 일관된 반복당 캡처가 간단해집니다.
반면 for
루프는 더 복잡합니다. 초기화, 조건, 반복자 및 본문으로 구성됩니다. 이니셜라이저는 한 번만 실행되어 단일 루프 변수를 생성합니다. 루프 변수의 값은 본질적으로 각 반복에 연결되지 않습니다. 루프 본문 내에서 독립적으로 조작할 수 있습니다.
고려 사항:
<code class="language-csharp">for (int i = 0, j = 10; i < 5; i++, j--) { Console.WriteLine(i, j); }</code>
루프 변수 i
가 각 반복에서 캡처된 경우 j
의 독립적 수정으로 인해 동작이 예측 불가능하고 잠재적으로 모호할 수 있습니다. 의 최종i
값을 캡처하는 일관된 동작은 명확하고 예측 가능한 결과를 제공합니다. 이렇게 하면 예상치 못한 복잡성과 잠재적인 버그가 발생하는 것을 방지할 수 있습니다. 따라서 겉으로는 일관성이 없어 보이지만 C# 5.0의 다양한 처리 방식은 루프 유형 간의 고유한 구조적 차이를 반영하고 각 사례에서 명확하고 예측 가능한 동작을 목표로 합니다.
위 내용은 왜 C# 5.0에서는 `foreach` 루프에서와 마찬가지로 `for` 루프에 대해 캡처된 클로저 동작을 수정하지 않았습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!