Closure - for vs foreach

카카오톡 닷넷 채팅방에서 @aroooong 님이 찾아주신 내용입니다.

Closure는 아는 사람들은 아는 언어적 특성입니다.
C#에만 있는 것은 아니고 Lambda 식이 있는 일급함수들에 나타나는 특징으로 알려져 있습니다.

다만 C#에서 for일 때는 Closure의 특성 때문에 for문 안에서 delegate 메서드를 동작시킬 때 for의 count 변수를 사용한다면 for의 스코프 내에서 새로 할당해서 사용해야 합니다.
그래야만 의도대로 코드가 동작합니다.

그런데 foreach에서는 따로 할당하지 않아도 foreach안에서 Delegate 메서드를 동작시키면 문제없이 동작합니다.
저는 이런 현상이 foreach가 Enumerable 컬렉션에서 하나씩 받아서 쓰기 때문이라도 생각했었는데 그게 아니고 아래와 같은 이슈가 있기 때문이었습니다.

foreach의 변수 사용이 C # 5에서 변경되었습니까? - 스택 오버플로 (stackoverflow.com)

while문에 사용되는 V v;가 안에서 선언되었는지, 밖에서 선언되었는지 에 따라 for문과 같은 형태의 패턴을 보이고 있었습니다.

5개의 좋아요

이 참에 확실히 클로저에 대해서 알게 됐습니다.
좋은 글 공유 감사합니다.

3개의 좋아요