루프에서 C# lambda 표현 캡처 이해 및 해당 솔루션
루프 내의 람다 표현식은 일반적인 함정을 나타냅니다. 동일한 변수를 캡처하여 예상치 못한 결과를 초래합니다. 이는 Lambda 표현식이 생성시 변수의값 를 캡처하지 않고 변수 자체에 대한 참조
를 캡처하지 않기 때문입니다. 이 예를 고려하십시오 :
<code class="language-csharp">List<Func<int>> actions = new List<Func<int>>(); int variable = 0; while (variable < 5) { actions.Add(() => variable * 2); ++variable; } foreach (var act in actions) { Console.WriteLine(act.Invoke()); }</code>루프의 동작은이 문제를 해결하기 위해 변경되었습니다. 컴파일러는 "클로저 할당 임시 변수"(CATV)를 사용하여 각 반복에 대해 별도의 변수를 자동으로 생성하여 수동 사본이 필요하지 않습니다. 이 단순화는 코드를 더 깨끗하고 읽기 쉽게 만듭니다. 그러나 루프 예제에는 여전히 명시적인 사본이 필요합니다.
위 내용은 루프의 C# lambda 표현식이 동일한 변수를 캡처하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!