>백엔드 개발 >C++ >내 C# 루프가 잘못된 변수 값을 캡처하는 이유는 무엇입니까?

내 C# 루프가 잘못된 변수 값을 캡처하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-02-03 07:59:09874검색

주기의 표지 변수 : 이상한 문제 Why Does My C# Loop Capture the Wrong Variable Value?
C#사이클을 사용할 때는 변수를 캡처하기 위해 특별한 문제가 발생할 수 있습니다. 다음 장면을 고려해 봅시다 :

예상과 달리이 코드는 예상 시퀀스 0, 2, 4, 6, 8 대신 5 "10"을 인쇄합니다. >> 질문 : 사이클의 캡처 변수 주기에서 생성 된 모든 람다 함수는 동일한 변수 입니다. 따라서 이러한 기능이 외부에서 호출되면 모두

의 최종 값을 인용합니다.

솔루션 : 구조를 복사하십시오 이 문제를 해결하려면 사이클에서 변수의 사본을 작성한 다음 각 Lambda 기능에서 캡처해야합니다.
<code class="language-csharp">List<Action> actions = new List<Action>();

int variable = 0;
while (variable < 5)
{
    actions.Add(() => Console.WriteLine(variable * 2));
    ++variable;
}

foreach (var act in actions)
{
    act.Invoke();
}</code>
사본을 만들어 사이클에서 생성 된 각 클로저는 자체

고유 값을 캡처하여 예상 출력을 생성합니다.

예방 조치

이 기술은 여러 반복의 단일 변수를 참조하는 FOR 및 Foreach 사이클에도 적용됩니다. 이 문제를 피하기 위해 C# 5 컴파일러의 Foreach 사이클 처리 방법에 순종하는 것이 좋습니다. 이는 각 반복에 자체 캡처 변수를 갖도록합니다.

위 내용은 내 C# 루프가 잘못된 변수 값을 캡처하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.