c#
사이클 변수 재사용 : 불필요한 함정
C#에서 Lambda 표현식 또는 익명 메소드를 사용할 때 수정 된 클로저 액세스가 나타날 수 있습니다. 주기에서 변수 재사용으로 인해이 문제가 악화되었습니다.
컴파일러는 일반적으로 수정 된 폐쇄 예와 같이 사이클 바디 외부의 사이클 변수를 선언합니다.
이것은주기에서 선언 된 변수에 대한 기대치와 다릅니다.
외부 변수 명령문은 변수의 범위가 길어 지므로 수정 된 클로저 액세스 문제를 악화 시켰습니다. 사이클에서 선언 된 변수는 사이클 외부에서 액세스 할 수 없습니다. foreach
> 컴파일러는 Lambda 표현 및 익명 방법이 도입되기 전에 원형 변수를 재사용하기로 결정합니다. 따라서 당시 변수 재사용이 완전히 고려되었다는 잠재적 인 트랩은 없었습니다.
C# 5 에서이 설계 결함은 큰 변화를 통해 해결됩니다. 원형 변수는주기 본문 내부에있어서 각 폐쇄가 새 사본을 받도록합니다. 이 변화는 사이클 수정의 폐쇄 트랩을 제거합니다.
이 수리는 대중적인 개선이지만 이전 버전의 기존 버전을 사용 하거나이 수리를 지원하지 않을 때는 여전히이 문제에주의를 기울여야합니다. 위 내용은 C#'s`foreach` 루프 변수 재사용은 왜 폐쇄에 문제가 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!