Yineleme deyimleri - for
, foreach
, do
ve while
Yineleme deyimleri sürekli olarak bir deyim veya deyim bloğu yürütür. Deyimi, for
belirtilen bir Boole ifadesi olarak değerlendirilirken gövdesini true
yürütür. deyimi bir foreach
koleksiyonun öğelerini numaralandırır ve koleksiyonunun her öğesi için gövdesini yürütür. deyimido
, gövdesini bir veya daha fazla kez koşullu olarak yürütür. deyimiwhile
, gövdesini koşullu olarak sıfır veya daha fazla kez yürütür.
Yineleme deyiminin gövdesinde herhangi bir noktada deyimini break
kullanarak döngüden çıkabilirsiniz. deyimini kullanarak döngüdeki bir sonraki yinelemeye continue
adım atabilirsiniz.
Deyimi for
deyimi for
bir deyimini veya deyim bloğunu yürütürken, belirtilen Boole ifadesi olarak true
değerlendirilir. Aşağıdaki örnek, bir tamsayı sayacı üçten küçükken gövdesini yürüten deyimini gösterir for
:
for (int i = 0; i < 3; i++)
{
Console.Write(i);
}
// Output:
// 012
Yukarıdaki örnekte deyiminin öğeleri gösterilmektedir for
:
Döngüye girmeden önce yalnızca bir kez yürütülen başlatıcı bölümü. Genellikle, bu bölümde bir yerel döngü değişkeni bildirir ve başlatırsınız. Bildirilen değişkene deyiminin dışından
for
erişilemiyor.Yukarıdaki örnekteki başlatıcı bölümü bir tamsayı sayacı değişkeni bildirir ve başlatır:
int i = 0
Döngüdeki bir sonraki yinelemenin yürütülmesi gerekip gerekmediğini belirleyen koşul bölümü. olarak değerlendirilirse
true
veya yoksa, sonraki yineleme yürütülür; aksi takdirde döngüden çıkarılır. Koşul bölümü bir Boole ifadesi olmalıdır.Yukarıdaki örnekteki koşul bölümü, sayaç değerinin üçten küçük olup olmadığını denetler:
i < 3
Döngü gövdesinin her yürütülmesinden sonra ne olacağını tanımlayan yineleyici bölümü.
Önceki örnekteki yineleyici bölümü sayacı artırır:
i++
Bir deyimi veya deyim bloğu olması gereken döngünün gövdesi.
Yineleyici bölümü, virgülle ayrılmış olarak aşağıdaki deyim ifadelerinden sıfır veya daha fazlasını içerebilir:
- veya gibi
++i
ön ek veya sonek artım ifadesii++
- veya gibi
--i
ön ek veya sonek azaltma ifadesii--
- Atama
- yöntemi çağırma
await
Ifa -de- işlecini kullanarak
new
nesne oluşturma
Başlatıcı bölümünde bir döngü değişkeni bildirmezseniz, başlatıcı bölümündeki önceki listede yer alan ifadelerin sıfırını veya daha fazlasını da kullanabilirsiniz. Aşağıdaki örnekte başlatıcı ve yineleyici bölümlerinin daha az yaygın olarak kullanılan birkaç kullanımı gösterilmektedir: başlatıcı bölümündeki bir dış değişkene değer atama, hem başlatıcı hem de yineleyici bölümlerinde bir yöntem çağırma ve yineleyici bölümündeki iki değişkenin değerlerini değiştirme:
int i;
int j = 3;
for (i = 0, Console.WriteLine($"Start: i={i}, j={j}"); i < j; i++, j--, Console.WriteLine($"Step: i={i}, j={j}"))
{
//...
}
// Output:
// Start: i=0, j=3
// Step: i=1, j=2
// Step: i=2, j=1
deyiminin tüm bölümleri for
isteğe bağlıdır. Örneğin, aşağıdaki kod sonsuz for
döngüsü tanımlar:
for ( ; ; )
{
//...
}
Deyimi foreach
deyimi, foreach
aşağıdaki örnekte gösterildiği gibi veya arabirimini uygulayan System.Collections.IEnumerable türün bir örneğindeki her öğe için bir deyim veya System.Collections.Generic.IEnumerable<T> deyim bloğu yürütür:
List<int> fibNumbers = new() { 0, 1, 1, 2, 3, 5, 8, 13 };
foreach (int element in fibNumbers)
{
Console.Write($"{element} ");
}
// Output:
// 0 1 1 2 3 5 8 13
deyimi foreach
bu türlerle sınırlı değildir. Bunu aşağıdaki koşulları karşılayan herhangi bir tür örneğiyle kullanabilirsiniz:
- Bir tür, genel parametresiz
GetEnumerator
yöntemine sahiptir.GetEnumerator
yöntemi bir türün uzantı yöntemi olabilir. - yönteminin
GetEnumerator
dönüş türü publicCurrent
özelliğine ve dönüş türü olan public parametresizMoveNext
yönteminebool
sahiptir.
Aşağıdaki örnek, türün foreach
System.Span<T> bir örneğiyle deyimini kullanır ve bu örnekte arabirim uygulanmaz:
Span<int> numbers = [3, 14, 15, 92, 6];
foreach (int number in numbers)
{
Console.Write($"{number} ");
}
// Output:
// 3 14 15 92 6
Numaralandırıcının Current
özelliği bir başvuru dönüş değeri döndürürse (ref T
burada T
bir koleksiyon öğesinin türüdür), aşağıdaki örnekte gösterildiği gibi veya ref readonly
değiştiricisi ref
ile bir yineleme değişkeni bildirebilirsiniz:
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
deyiminin foreach
kaynak koleksiyonu boşsa, deyiminin foreach
gövdesi yürütülür ve atlanır. foreach
deyimi uygulanırsanull
, bir NullReferenceException oluşturulur.
await foreach
Zaman uyumsuz bir veri akışı, yani arabirimi uygulayan koleksiyon türünü kullanmak için deyimini IAsyncEnumerable<T> kullanabilirsinizawait foreach
. Sonraki öğe zaman uyumsuz olarak alınırken döngünün her yinelemesi askıya alınabilir. Aşağıdaki örnekte deyiminin nasıl kullanılacağı gösterilmektedir await foreach
:
await foreach (var item in GenerateSequenceAsync())
{
Console.WriteLine(item);
}
Deyimini await foreach
aşağıdaki koşulları karşılayan herhangi bir türün örneğiyle de kullanabilirsiniz:
- Bir tür, genel parametresiz
GetAsyncEnumerator
yöntemine sahiptir. Bu yöntem bir türün uzantı yöntemi olabilir. - yönteminin
GetAsyncEnumerator
dönüş türü publicCurrent
özelliğine ve dönüş türüTask<bool>
,ValueTask<bool>
olan genel parametresizMoveNextAsync
yönteme veya awaiter'ınGetResult
yöntemi bir değer döndüren başka birbool
beklenebilir türe sahiptir.
Varsayılan olarak, akış öğeleri yakalanan bağlamda işlenir. Bağlam yakalamayı devre dışı bırakmak istiyorsanız uzantı yöntemini kullanın TaskAsyncEnumerableExtensions.ConfigureAwait . Eşitleme bağlamları ve geçerli bağlamı yakalama hakkında daha fazla bilgi için bkz . Görev tabanlı zaman uyumsuz deseni kullanma. Zaman uyumsuz akışlar hakkında daha fazla bilgi için Zaman uyumsuz akışlar öğreticisine bakın.
Yineleme değişkeninin türü
Aşağıdaki kodda var
gösterildiği gibi derleyicinin deyimindeki foreach
bir yineleme değişkeninin türünü çıkarmasına izin vermek için anahtar sözcüğünü kullanabilirsiniz:
foreach (var item in collection) { }
Not
var
Türü, null atanabilir algılanabilir bağlamın etkinleştirilip etkinleştirilmediğine ve başlatma ifadesinin türünün bir başvuru türü olup olmadığına bağlı olarak, derleyici tarafından null atanabilir başvuru türü olarak çıkarılabilir.
Daha fazla bilgi için bkz. Örtük olarak yazılan yerel değişkenler.
Aşağıdaki kodda gösterildiği gibi yineleme değişkeninin türünü açıkça belirtebilirsiniz:
IEnumerable<T> collection = new T[5];
foreach (V item in collection) { }
Önceki formda, bir koleksiyon öğesinin türü T
örtük veya açıkça bir yineleme değişkeni türüne V
dönüştürülebilir olmalıdır. açık dönüştürme ile T
V
çalışma zamanında başarısız olursa deyimi foreach
bir InvalidCastExceptionoluşturur. Örneğin, korumalı olmayan bir sınıf türüyse T
, V
uygulamayan T
herhangi bir arabirim türü bile olabilir. Çalışma zamanında, bir koleksiyon öğesinin türü öğesinden T
türetilen ve aslında uygulayan V
öğe olabilir. Böyle bir durum söz konusu değilse, bir InvalidCastException oluşturulur.
Deyimi do
deyimi do
bir deyimini veya deyim bloğunu yürütürken, belirtilen Boole ifadesi olarak true
değerlendirilir. Bu ifade döngünün her yürütülmesinden sonra değerlendirildiğinden, bir döngü bir do
veya daha fazla kez yürütülür. Döngüdo
, sıfır veya daha fazla kez yürütülen döngüden while
farklıdır.
Aşağıdaki örnekte deyiminin kullanımı gösterilmektedir do
:
int n = 0;
do
{
Console.Write(n);
n++;
} while (n < 5);
// Output:
// 01234
Deyimi while
deyimi while
bir deyimini veya deyim bloğunu yürütürken, belirtilen Boole ifadesi olarak true
değerlendirilir. Bu ifade döngünün her yürütülmesinden önce değerlendirildiğinden, döngü while
sıfır veya daha fazla kez yürütülür. Döngüwhile
, bir veya daha fazla kez yürütülen döngüden do
farklıdır.
Aşağıdaki örnekte deyiminin kullanımı gösterilmektedir while
:
int n = 0;
while (n < 5)
{
Console.Write(n);
n++;
}
// Output:
// 01234
C# dili belirtimi
Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın:
Bu özellikler hakkında daha fazla bilgi için aşağıdaki özellik teklifi notlarını inceleyin: