Instrukcja foreach w (odwołanie w C#)foreach, in (C# reference)

foreach Instrukcji wykonuje instrukcję lub blok instrukcji dla każdego elementu w określonym wystąpieniu typu, który implementuje System.Collections.IEnumerable lub System.Collections.Generic.IEnumerable<T> interfejsu.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 Instrukcja nie jest ograniczone do tych typów i mogą być stosowane do wystąpienia dowolnego typu, który spełnia następujące warunki:The foreach statement is not limited to those types and can be applied to an instance of any type that satisfies the following conditions:

  • ma publiczny bez parametrów GetEnumerator metody, którego typem zwracanym jest klasy, struktury lub typ interfejsuhas the public parameterless GetEnumerator method whose return type is either class, struct, or interface type,
  • zwracany typ GetEnumerator metoda ma publiczny Current właściwość i publiczny bez parametrów MoveNext metody, którego typem zwracanym jest Boolean.the return type of the GetEnumerator method has the public Current property and the public parameterless MoveNext method whose return type is Boolean.

Począwszy od C# 7.3, jeśli moduł wyliczający Current właściwość zwraca odwoływać się do wartości zwracanej (ref T gdzie T jest typ elementu kolekcji), można zadeklarować zmiennej iteracji ref lub ref readonly modyfikator.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.

W dowolnym punkcie w foreach blok instrukcji, można zerwać pętlę za pomocą podziału instrukcji lub krok do następnej iteracji w pętli za pomocą nadal instrukcji.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. Możesz również wyjść foreach pętli przez przejdź do, zwracają, lub throw instrukcji.You also can exit a foreach loop by the goto, return, or throw statements.

Jeśli foreach instrukcji jest stosowany do null, NullReferenceException zgłaszany.If the foreach statement is applied to null, a NullReferenceException is thrown. Jeśli źródło zbiór foreach instrukcja jest pusta, treść foreach pętli nie jest wykonywane i pominięte.If the source collection of the foreach statement is empty, the body of the foreach loop is not executed and skipped.

PrzykładyExamples

Uwaga

Przykłady języka C#, w tym artykule są uruchamiane w Try.NET modułu uruchamiającego testy i Plac zabaw dla kodu wbudowanego.The C# examples in this article run in the Try.NET inline code runner and playground. Wybierz Uruchom przycisk, aby uruchomić przykład, w oknie interaktywnym.Select the Run button to run an example in an interactive window. Po wykonaniu kodu, możesz go zmodyfikować i uruchomić zmodyfikowany kod, wybierając Uruchom ponownie.Once you execute the code, you can modify it and run the modified code by selecting Run again. Zmodyfikowanego kodu albo działa w oknie interaktywnym lub, jeśli kompilacja nie powiedzie się, w oknie interaktywnym Wyświetla wszystkie C# kompilatora komunikaty o błędach.The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

W poniższym przykładzie pokazano użycie foreach instrukcję, określając wystąpienie List<T> typu, który implementuje IEnumerable<T> interfejsu: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}");

W następnym przykładzie użyto foreach instrukcję, określając wystąpienie System.Span<T> typ, który nie implementuje żadnych interfejsów: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();
    }
}

W poniższym przykładzie użyto ref Zmienna iteracji można ustawić wartości dla każdego elementu w tablicy stackalloc.The following example uses a ref iteration variable to set the value of each item in a stackalloc array. ref readonly Wersji iteruje po kolekcji do wyświetlania wartości.The ref readonly version iterates the collection to print all the values. readonly Deklaracji używa niejawne deklaracji zmiennej lokalnej.The readonly declaration uses an implicit local variable declaration. Niejawne deklaracje zmiennej może być używany z albo ref lub ref readonly deklaracji, jak można jawnie wpisane deklaracje zmiennych.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
    }
}

specyfikacja języka C#C# language specification

Aby uzyskać więcej informacji, zobacz Instrukcja foreach części C# specyfikacji języka.For more information, see The foreach statement section of the C# language specification.

Zobacz takżeSee also