람다 표현식이 C#에서 반복자 변수의 최종 값을 캡처하는 이유는 무엇입니까?
C#에서 반복자와 함께 람다 식 사용
C#에서 람다 식은 익명 함수를 정의하는 간결하고 편리한 방법을 제공합니다. 그러나 반복자와 함께 람다 표현식을 사용할 때 흔히 발생하는 함정은 캡처된 변수가 반복기 변수의 현재 값이 아니라 최종 값이라는 점입니다.
다음 코드를 고려하세요.
<code class="c#">Type[] types = new Type[] { typeof(string), typeof(float), typeof(int) }; List<PrintHelloType> helloMethods = new List<PrintHelloType>(); foreach (var type in types) { var sayHello = new PrintHelloType(greeting => SayGreetingToType(type, greeting)); helloMethods.Add(sayHello); } foreach (var helloMethod in helloMethods) { Console.WriteLine(helloMethod("Hi")); }</code>
이 코드를 실행하면 다음 출력이 인쇄될 것으로 예상할 수 있습니다.
Hi String Hi Single Hi Int32
그러나 실제 출력은 다음과 같습니다.
Hi Int32 Hi Int32 Hi Int32
이는 람다 식이 캡처하기 때문입니다. 람다가 정의된 시점의 값이 아닌 루프 변수 유형입니다. 따라서 람다가 실행될 때 유형의 최종 값인 Int32를 사용합니다.
이 문제를 해결하고 원하는 출력을 얻으려면 로컬 변수를 사용하여 반복자의 현재 값을 캡처할 수 있습니다.
<code class="c#">foreach (var type in types) { var newType = type; var sayHello = new PrintHelloType(greeting => SayGreetingToType(newType, greeting)); helloMethods.Add(sayHello); }</code>
이 경우 람다 식은 type의 현재 값이 할당된 지역 변수 newType을 캡처합니다. 이렇게 하면 람다 식이 실행될 때 올바른 유형 값을 사용하게 됩니다.
위 내용은 람다 표현식이 C#에서 반복자 변수의 최종 값을 캡처하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?
