C# 5.0 루프의 캡처 클로저 : 루프와 foreach 루프의 차이
질문:
C# 5.0에서 Foreach 루프의 캡처 클로저를 올바르게 캡처 할 수 있지만 For 루프의 캡처 클로저가 여전히 문제가있는 이유는 무엇입니까?
답변:
논리적으로 말하면, 루프의 폐쇄 동작은 합리적입니다. FER 루프를 구성 요소 (초기화, 조건, 반복자 및 본문)로 분해 한 후 이니셜 라이저는 한 번만 실행됩니다. 따라서 하나의 "가변 인스턴스화"만있는 것은 논리적입니다.
또한 for 루프에서 각 반복에 대한 변수의 초기 값은 미리 결정되지 않습니다. 다음 예를 고려하십시오.
for (int i = 0, j = 10; i Console.WriteLine(i, j);
action();
}
이 루프에서는 루프 중에 J 값이 변경 될 수 있습니다. 이 경우 예상되는 행동은 무엇입니까?
대조적으로, Foreach 루프는 각 반복마다 새로운 변수를 선언하는 것으로 보이며 해당 변수는 읽기 전용입니다. 따라서, 반복자에서 값을 가져온 각 반복에서 별도의 읽기 전용 변수를 선언하는 Foreach 루프를 생각하는 것이 합리적입니다. 이것은 Foreach 루프에서 폐쇄를 올바르게 캡처 할 수있는 이유를 설명합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3