foreach, in(C# 참조)foreach, in (C# reference)

foreach 문은 System.Collections.IEnumerable 또는 System.Collections.Generic.IEnumerable<T> 인터페이스를 구현하는 형식의 인스턴스에 있는 각 요소에 대해 문 또는 문 블록을 실행합니다.The foreach statement executes a statement or a block of statements for each element in an instance of the type that implements the System.Collections.IEnumerable or System.Collections.Generic.IEnumerable<T> interface. foreach 문은 해당 형식으로 제한되지 않으며 다음 조건을 충족하는 모든 형식의 인스턴스에 적용될 수 있습니다.The foreach statement is not limited to those types and can be applied to an instance of any type that satisfies the following conditions:

  • 반환 형식이 클래스, 구조체 또는 인터페이스 유형인 public 매개 변수가 없는 GetEnumerator 메서드를 포함합니다.has the public parameterless GetEnumerator method whose return type is either class, struct, or interface type,
  • GetEnumerator 메서드의 반환 형식이 public Current 속성과 반환 형식이 Boolean인 public 매개 변수가 없는 MoveNext 메서드를 포함합니다.the return type of the GetEnumerator method has the public Current property and the public parameterless MoveNext method whose return type is Boolean.

C# 7.3부터는 열거자의 Current 속성이 참조 반환 값(ref T 여기서 T는 컬렉션 요소의 형식임)을 반환하는 경우 ref 또는 ref readonly 한정자를 사용하여 반복 변수를 선언할 수 있습니다.Beginning with C# 7.3, if the enumerator's Current property returns a reference return value (ref T where T is the type of the collection element), you can declare the iteration variable with the ref or ref readonly modifier.

foreach 문 블록 내 원하는 지점에서 break 문을 사용하여 루프를 중단하거나 continue 문을 사용하여 루프의 다음 반복을 한 단계 실행할 수 있습니다.At any point within the foreach statement block, you can break out of the loop by using the break statement, or step to the next iteration in the loop by using the continue statement. goto, return 또는 throw 문으로 foreach 루프를 종료할 수도 있습니다.You also can exit a foreach loop by the goto, return, or throw statements.

foreach 문이 null에 적용되면 NullReferenceException이 throw됩니다.If the foreach statement is applied to null, a NullReferenceException is thrown. foreach 문의 소스 컬렉션이 비어 있으면 foreach 루프의 본문이 실행되지 않고 건너뜁니다.If the source collection of the foreach statement is empty, the body of the foreach loop is not executed and skipped.

예제Examples

참고

이 문서의 C# 예제는 Try.NET 인라인 코드 러너 및 놀이터에서 실행됩니다.The C# examples in this article run in the Try.NET inline code runner and playground. 대화형 창에서 예제를 실행하려면 실행 버튼을 선택합니다.Select the Run button to run an example in an interactive window. 코드를 실행하면 실행을 다시 선택하여 코드를 수정하고 수정된 코드를 실행할 수 있습니다.Once you execute the code, you can modify it and run the modified code by selecting Run again. 수정된 코드는 대화형 창에서 실행되거나, 컴파일이 실패하면 대화형 창에 모든 C# 컴파일러 오류 메시지가 표시됩니다.The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

다음 예제는 IEnumerable<T> 인터페이스를 구현하는 List<T> 형식의 인스턴스와 함께 foreach 문의 사용법을 보여줍니다.The following example shows usage of the foreach statement with an instance of the List<T> type that implements the IEnumerable<T> interface:

var fibNumbers = new List<int> { 0, 1, 1, 2, 3, 5, 8, 13 };
int count = 0;
foreach (int element in fibNumbers)
{
    count++;
    Console.WriteLine($"Element #{count}: {element}");
}
Console.WriteLine($"Number of elements: {count}");

다음 예제에서는 인터페이스를 구현하지 않는 System.Span<T> 형식의 인스턴스와 함께 foreach 문을 사용합니다.The next example uses the foreach statement with an instance of the System.Span<T> type, which doesn't implement any interfaces:

public class IterateSpanExample
{
    public static void Main()
    {
        Span<int> numbers = new int[] { 3, 14, 15, 92, 6 };
        foreach (int number in numbers)
        {
            Console.Write($"{number} ");
        }
        Console.WriteLine();
    }
}

다음 예제에서는 ref 반복 변수를 사용하여 stackalloc 배열의 각 항목 값을 설정합니다.The following example uses a ref iteration variable to set the value of each item in a stackalloc array. ref readonly 버전은 컬렉션을 반복하여 모든 값을 인쇄합니다.The ref readonly version iterates the collection to print all the values. readonly 선언은 암시적 로컬 변수 선언을 사용합니다.The readonly declaration uses an implicit local variable declaration. 명시적으로 변수 선언을 입력하므로 ref 또는 ref readonly에서 암시적 변수 선언을 사용할 수 있습니다.Implicit variable declarations can be used with either ref or ref readonly declarations, as can explicitly typed variable declarations.

public class ForeachRefExample
{
    public static void Main()
    {
        Span<int> storage = stackalloc int[10];
        int num = 0;
        foreach (ref int item in storage)
        {
            item = num++;
        }

        foreach (ref readonly var item in storage)
        {
            Console.Write($"{item} ");
        }
        // Output:
        // 0 1 2 3 4 5 6 7 8 9
    }
}

C# 언어 사양C# language specification

자세한 내용은 C# 언어 사양foreach 문 섹션을 참조하세요.For more information, see The foreach statement section of the C# language specification.

참고 항목See also