foreach, in (C# referans)foreach, in (C# reference)

Deyim, foreach her öğe için bir deyim System.Collections.IEnumerable veya System.Collections.Generic.IEnumerable<T> ifade bloğu uygular türü veya arabirimi uygulayan bir örnek teveks.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. Bildirim foreach bu türlerle sınırlı değildir ve aşağıdaki koşulları yerine getiren herhangi bir türe uygulanabilir:The foreach statement is not limited to those types and can be applied to an instance of any type that satisfies the following conditions:

  • dönüş türü sınıf, GetEnumerator yapı veya arayüz türü olan ortak parametresiz yönteme sahiptir,has the public parameterless GetEnumerator method whose return type is either class, struct, or interface type,
  • yöntemin GetEnumerator dönüş türü kamu Current malı ve geri dönüş MoveNext türü olan Booleankamu parametresiz yöntemi vardır.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 ile başlayarak, numaralandırıcının Current özelliği bir referans dönüş T değeri döndürürse (toplamaref T öğesinin türü nerede), yineleme değişkenini veya ref ref readonly değiştiriciile birlikte bildirebilirsiniz.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.

C# 8.0 ile await başlayarak, koleksiyon foreach türü arabirimi uyguladığında IAsyncEnumerable<T> işleç deyimine uygulanabilir.Beginning with C# 8.0, the await operator may be applied to the foreach statement when the collection type implements the IAsyncEnumerable<T> interface. Döngünün her yinelemesi, bir sonraki öğe eş senkronize olarak alınırken askıya alınabilir.Each iteration of the loop may be suspended while the next element is retrieved asynchronously. Varsayılan olarak, akış öğeleri yakalanan bağlamında işlenir.By default, stream elements are processed in the captured context. Bağlamın ele geçirilmesini devre dışı kılmış TaskAsyncEnumerableExtensions.ConfigureAwait olmak istiyorsanız, uzantı yöntemini kullanın.If you want to disable capturing of the context, use the TaskAsyncEnumerableExtensions.ConfigureAwait extension method. Eşitleme bağlamları ve geçerli bağlamı yakalama hakkında daha fazla bilgi için, Görev tabanlı eşzamanlı deseni tüketme makalesinebakın.For more information about synchronization contexts and capturing the current context, see the article on consuming the Task-based asynchronous pattern.

İfade bloğu içindeki herhangi bir noktada, kesme deyimini kullanarak döngüden çıkabilir veya continue deyimini kullanarak döngüdeki bir sonraki yinelemeye adım atabilirsiniz. continue foreachAt 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. Ayrıca foreach goto, returnveya atmak ifadeleri tarafından bir döngü çıkabilirsiniz.You also can exit a foreach loop by the goto, return, or throw statements.

İfadesi foreach nulluygulanırsa, NullReferenceException a atılır.If the foreach statement is applied to null, a NullReferenceException is thrown. foreach İfadenin kaynak koleksiyonu boşsa, foreach döngügövdesi yürütülmez ve atlanır.If the source collection of the foreach statement is empty, the body of the foreach loop isn't executed and skipped.

ÖrneklerExamples

Not

Bu makaledeki C# örnekleri Try.NET satır lı kod koşucusu ve oyun alanında çalışır.The C# examples in this article run in the Try.NET inline code runner and playground. Etkileşimli bir pencerede bir örnek çalıştırmak için Çalıştır düğmesini seçin.Select the Run button to run an example in an interactive window. Kodu çalıştırdıktan sonra, yeniden Çalıştır'ı seçerek kodu değiştirebilir ve değiştirilmiş kodu çalıştırabilirsiniz.Once you execute the code, you can modify it and run the modified code by selecting Run again. Değiştirilen kod etkileşimli pencerede çalışır veya derleme başarısız olursa, etkileşimli pencere tüm C# derleyici hata iletilerini görüntüler.The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

Aşağıdaki örnek, ifadenin foreach IEnumerable<T> arabirimi uygulayan List<T> türe ait bir örneği yle kullanımını gösterir: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}");

Sonraki örnek, foreach herhangi bir arabirim System.Span<T> uygulamaz türü, bir örnek ile deyimi kullanır: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();
    }
}

Aşağıdaki örnek, ref stackalloc dizisindeher öğenin değerini ayarlamak için bir yineleme değişkeni kullanır.The following example uses a ref iteration variable to set the value of each item in a stackalloc array. Sürüm, ref readonly tüm değerleri yazdırmak için koleksiyonu yineler.The ref readonly version iterates the collection to print all the values. Bildirimde readonly örtülü yerel değişken bildirimi kullanır.The readonly declaration uses an implicit local variable declaration. Örtük değişken bildirimleri, ref açıkça ref readonly yazılan değişken bildirimleri gibi, ya da bildirimleri ile kullanılabilir.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
    }
}

Aşağıdaki örnek, await foreach her öğeyi eşit olarak oluşturan bir koleksiyonu yinelemek için kullanır:The following example uses await foreach to iterate a collection that generates each element asynchronously:

await foreach (var item in GenerateSequenceAsync())
{
    Console.WriteLine(item);
}

C# dili belirtimiC# language specification

Daha fazla bilgi için C# dil belirtiminin foreach deyimi bölümüne bakın.For more information, see The foreach statement section of the C# language specification.

Ayrıca bkz.See also