> 백엔드 개발 > C++ > 루프의 C# lambda 표현식이 왜 최종 변수 값을 캡처하고 어떻게 해결할 수 있습니까?

루프의 C# lambda 표현식이 왜 최종 변수 값을 캡처하고 어떻게 해결할 수 있습니까?

Barbara Streisand
풀어 주다: 2025-02-03 08:10:09
원래의
794명이 탐색했습니다.

Why Do C# Lambda Expressions in Loops Capture the Final Variable Value, and How Can This Be Fixed?

C# lambda 표현식 변수 캡처

C# 프로그래밍에서 빈번한 문제는 루프 내의 람다 표현식과 관련이 있습니다. Lambda Expressions 변수를 캡처하는 방식은 예상치 못한 결과로 이어질 수 있습니다. 이 문제와 그 해결책을 탐색합시다. <:>이 코드를 고려하십시오 : 예상 출력은 짝수 숫자 (0, 2, 4, 6, 8)의 시퀀스입니다. 그러나 실제 출력은 5 개의 10입니다. 이것은 각 람다 발현이 를 에 포착하여 생성 당시의 가치가 아니기 때문에 발생합니다. 람다가 호출 될 때까지

는 이미 최종 값에 도달했습니다. 솔루션 : 사본 생성

이를 수정하려면 각 람다 표현식의 범위 내에서 루프 변수의 사본을 만들어야합니다.

이제 각 람다 표현식은 생성 시점에

의 값의 독립적 인 사본을 포착하여 예상 출력을 생성합니다. c# 5 및 foreach 루프 List<Func<int>> actions = new List<Func<int>>(); int variable = 0; while (variable < 10) { actions.Add(() => variable * 2); ++variable; } foreach (var act in actions) { Console.WriteLine(act.Invoke()); } 이 동작은 C# 5 이상 버전의

루프와 관련이 없음을 주목하는 것이 중요합니다. 컴파일러는이 문제를 방지하기 위해 변수 캡처를 다르게 처리합니다. 그러나 명시 적 복사 방법은 구형 C# 버전과의 명확성과 호환성을위한 모범 사례로 남아 있습니다. 이 접근법을 사용하면 모든 C# 버전 및 루프 유형에서 일관된 동작이 보장됩니다.

위 내용은 루프의 C# lambda 표현식이 왜 최종 변수 값을 캡처하고 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿