반복기(C# 프로그래밍 가이드)

반복기는 yield 키워드를 사용하여 배열이나 컬렉션 클래스에서 사용자 지정 반복을 수행하는 메서드, get 접근자 또는 연산자입니다. yield return 문을 사용하면 소스 시퀀스에서 다음 요소에 액세스하기 전에 소스 시퀀스의 요소가 호출자에게 즉시 반환됩니다. 반복기를 메서드로 작성해도 컴파일러에서는 반복기를 중첩된 클래스, 즉 상태 시스템으로 변환합니다. 이 클래스에서는 클라이언트 코드에서 foreach 루프가 유지되는 동안 반복기의 위치를 추적합니다.

참고

컴파일러에서 수행하는 작업을 보려면 ILDASM.exe 도구를 사용하여 반복기 메서드에 대해 생성되는 IL(Intermediate Language) 코드를 참조하십시오.

반복기는 foreach 문을 사용하여 클라이언트 코드에서 호출됩니다. 예를 들어 요소를 역순으로 반환하거나 반복기에서 요소를 반환하기 전에 각 요소에 대해 작업을 수행하는 클래스에 대해 반복기를 만들 수 있습니다. 클래스 또는 구조체에 반복기를 만들 때는 전체 IEnumerator 인터페이스를 구현하지 않아도 됩니다. 컴파일러에서 반복기를 발견하면 IEnumerator 또는 IEnumerator<T> 인터페이스의 Current, MoveNext 및 Dispose 메서드를 자동으로 생성합니다.

반복기 개요

  • 반복기는 형식이 동일한 값을 순서대로 반환하는 코드 섹션입니다.

  • 반복기는 메서드 본문, 연산자 또는 get 접근자로 사용할 수 있습니다.

  • 반복기 코드에서는 yield return 문을 사용하여 각 요소를 차례로 반환합니다. yield break는 반복을 끝냅니다.

  • 클래스 하나에서 여러 반복기를 구현할 수 있습니다. 각 반복기는 다른 모든 클래스 멤버와 마찬가지로 고유한 이름을 가지고 있어야 하며, foreach(int x in SampleClass.Iterator2){}와 같이 foreach 문을 통해 클라이언트 코드에서 호출될 수 있습니다.

  • 반복기의 반환 형식은 IEnumerable, IEnumerator, IEnumerable<T> 또는 IEnumerator<T>여야 합니다.

  • 반복기는 LINQ 쿼리의 지연된 실행 동작의 기본이 됩니다.

yield 키워드는 하나 이상의 반환 값을 지정하는 데 사용합니다. 실행이 yield return 문에 도달하면 현재 위치가 저장되고, 다음에 반복기가 호출되면 이 위치에서 실행이 다시 시작됩니다.

반복기는 이진 트리 같이 복잡한 데이터 구조를 쉽게 반복할 수 있는 방법을 제공하므로 컬렉션 클래스에 특히 유용합니다.

관련 단원

자세한 내용은 다음을 참조하십시오.

예제

이 예제에서 DaysOfTheWeek 클래스는 한 주의 요일을 문자열로 저장하는 간단한 컬렉션 클래스입니다. foreach 루프를 반복할 때마다 컬렉션의 다음 문자열이 반환됩니다.

public class DaysOfTheWeek : System.Collections.IEnumerable
{
    string[] days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };

    public System.Collections.IEnumerator GetEnumerator()
    {
        for (int i = 0; i < days.Length; i++)
        {
            yield return days[i];
        }
    }
}

class TestDaysOfTheWeek
{
    static void Main()
    {
        // Create an instance of the collection class
        DaysOfTheWeek week = new DaysOfTheWeek();

        // Iterate with foreach
        foreach (string day in week)
        {
            System.Console.Write(day + " ");
        }
    }
}
// Output: Sun Mon Tue Wed Thr Fri Sat

C# 언어 사양

자세한 내용은 C# 언어 사양을 참조하십시오. 이 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.

참고 항목

참조

제네릭(C# 프로그래밍 가이드)

개념

C# 프로그래밍 가이드

기타 리소스

모든 반복기 정보