>백엔드 개발 >C++ >C# foreach 루프 변수 재사용 재사용이 '수정 된 폐쇄에 대한 액세스'문제를 일으키는 이유는 무엇입니까?

C# foreach 루프 변수 재사용 재사용이 '수정 된 폐쇄에 대한 액세스'문제를 일으키는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-31 21:16:10582검색

Why Does C# Foreach Loop Variable Reuse Cause

C# 루프 변수 재사용 : 문제 및 솔루션 루프 내에서 "수정 된 폐쇄"문제를 소개합니다. 이 예를 고려하십시오 : foreach 컴파일러의 생성 된 코드는 문제의 근본을 보여줍니다. 변수는

외부로 선언됩니다. 이 디자인은 처음에는 무해한 것처럼 보이지만 문제를 만듭니다. 성능 이점을 제공하지 않으며 루프 외부의 가변 사용을 제한합니다. 이 디자인이 왜? foreach 이 변수 재사용은 초기 C# (1.0)에서 설계 선택이었습니다. 내부와 외부 변수의 차이는 중요하지 않은 것으로 간주되었습니다. 그러나 C# 2.0의 폐쇄 시맨틱은 이것을 바꿨습니다. 루프와 일관성을 유지하면 루프 변수가 외부에 배치되었습니다.

C# 5 이상의 변화 foreach (var s in strings) { query = query.Where(i => i.Prop == s); // Modified closure issue ... }

결함을 인식하는 C# 5는 파괴 변경을 도입했습니다. 루프 변수는 이제 내부

<code class="language-csharp">string s;
while (enumerator.MoveNext())
{
   s = enumerator.Current;
   ...
}</code>
내부입니다. 각 반복은 신선한 사본을 얻습니다.

이것은 "수정 된 폐쇄"문제를 해결하여 이전 방법을 안전하지 않게 만듭니다. 또한 특히 s 루프의 Lambdas 또는 익명 방법으로 신중한 키워드 사용의 중요성을 강조합니다.

위 내용은 C# foreach 루프 변수 재사용 재사용이 '수정 된 폐쇄에 대한 액세스'문제를 일으키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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