C#의 foreach 루프에 대한 심층적인 이해
C#의 foreach
루프는 개발자가 컬렉션의 요소를 쉽고 효율적으로 반복할 수 있게 해주는 강력한 언어 구조입니다. 그런데 foreach
루프를 사용하려면 수업에서 정확히 무엇을 충족해야 할까요?
반복 가능한 클래스
IEnumerable
인터페이스를 구현하는 모든 클래스는 foreach
루프를 사용하여 반복할 수 있습니다. 기술적으로 클래스는 MoveNext()
메서드와 Current
속성을 사용하여 객체를 반환하는 GetEnumerator()
메서드만 제공하면 되지만, IEnumerable
을 구현하는 것이 이 기능을 제공하는 가장 일반적인 방법입니다.
일반적인 컬렉션 유형
Collection<T>
, List<T>
및 배열(T[])과 같은 표준 컬렉션 유형은 모두 ICollection
또는 IEnumerable
인터페이스를 구현하므로 foreach
루프에서 사용할 수 있습니다. 이는 이러한 유형이 열거될 수 있는 데이터 컬렉션을 나타내기 때문입니다.
foreach 루프 작동 방식
foreach (int i in obj)
과 유사한 foreach
루프는 대략 다음 코드로 변환됩니다.
<code class="language-csharp">var tmp = obj.GetEnumerator(); int i; // C# 4.0 之前 while (tmp.MoveNext()) { int i; // C# 5.0 及以后 i = tmp.Current; // 你的代码 }</code>
tmp
변수는 컬렉션 순회를 담당하는 열거자를 저장합니다. 각 반복에서 MoveNext()
메서드는 열거자를 다음 요소로 이동하는 반면 Current
특성은 현재 요소(예제에서는 i
와 같은 루프 변수에 할당됨)를 반환합니다.
변형 및 출시
구현에 따라 열거자는 IDisposable
인터페이스를 지원할 수 있습니다. 그렇다면 C#은 루프가 종료될 때 using
패턴을 사용하여 열거자를 자동으로 해제합니다. C# 5.0에서는 루프 변수 선언(int i)이 루프 내부로 이동했다는 점에 유의해야 합니다. 이는 무명 메서드나 람다 식에서 변수를 사용하려는 경우 매우 중요합니다.
위 내용은 Foreach 루프를 사용하여 C# 클래스를 반복 가능하게 만드는 것은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!