c# 사이클 변수 재사용 : 히스토리에서 남은 문제
LAMBDA 표현식 또는 익명 방법을 사용할 때 C#의 사이클 변수 재사용은 잠재적 인 문제를 유발할 수 있습니다. 이 재사용은 "수정 후 폐쇄"문제로 이어지는데, 여기서 사이클의 모든 람다 표현식은 각 반복의 현재 값이 아니라 변수의 최종 값을 참조합니다.
이 특수 행동의 출현은 아래 코드 변환과 같이 순환 도메인 외부에서 순환 변수가 선언되기 때문입니다.
foreach
일부 사람들은주기 외부에 변수가 성능 장점을 가져 오지 않을 것이라고 주장하지만, 사이클이 끝난 후에 만 액세스하는 것이 유용 할 수 있지만,이 방법은 폐쇄 문제로 인해 심각한 오류를 일으킬 수 있습니다.
for 사이클과 달리 FER 루프의 가변 범위는 사이클 내부에 있습니다. 이러한 불일치는 불필요한 오류 위험을 증가시키고 디버깅을 어렵게 만듭니다.
이 설계 선택은 Lambda 표현 및 익명 방법을 도입하기 전에 이루어질 수 있지만 수정되지 않았으며 여전히 개발자에게 문제를 가져올 것입니다.
C# 5 foreach
의 주요 변화
는이 디자인 결함을 인정했다. C# 5는이를 해결하기 위해 큰 변화를 도입했다. 원형 변수는 이제 사이클 본문 내부에서 논리적으로 작동합니다. 이는 폐쇄가 각 반복에서 변수의 새 사본을 캡처하여 수정 된 폐쇄 문제를 제거 함을 의미합니다.
그러나 For 루프는 변경되지 않으며 변경 사항은 초기 C#버전으로 거슬러 올라갑니다. 따라서 개발자는 Lambda Expression 또는 익명 방법으로 사이클을 사용할 때 계속 조심스럽게 작동해야합니다.
위 내용은 C#'s`foreach` 루프 변수 재사용 재사용은 람다에서 예상치 못한 동작을 일으키나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!