Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yineleme deyimleri -
Yineleme deyimleri tekrarlı olarak bir deyim veya deyim bloğu çalıştırı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
, koşullu olarak gövdesini sıfır veya daha fazla kez yürütür.
Yineleme deyiminin gövdesinde herhangi bir noktada deyiminibreak
kullanarak döngüden çıkabilirsiniz. deyimini kullanarak döngüdeki bir sonraki yinelemeye continue
adım atabilirsiniz.
for
ifadesi
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 for
deyimini göstermektedir.
for (int i = 0; i < 3; i++)
{
Console.Write(i);
}
// Output:
// 012
Önceki örnekte for
ifadesinin öğeleri gösterilmektedir:
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.
for
ifadesinin dışından bildirilen değişkene 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ü.
true
olarak değerlendirilirse veya mevcut değilse, sonraki yineleme yürütülür; aksi takdirde döngüden çıkı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++
Döngünün gövdesi, bir ifade veya ifade bloğu olmalıdır.
Yineleyici bölümü, virgülle ayrılmış olarak aşağıdaki deyim ifadelerinden sıfır veya daha fazlasını içerebilir:
- ön ek veya sonek artım ifadesi,
++i
veyai++
gibi - ön ek veya sonek azaltma ifadesi,
--i
veyai--
gibi - Atama/Ödev
- yöntemi çağırma
-
await
ifade -
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
İfadenin tüm bölümleri isteğe bağlıdır. Örneğin, aşağıdaki kod sonsuz for
döngüsü tanımlar:
for ( ; ; )
{
//...
}
foreach
ifadesi
foreach
deyimi, aşağıdaki örnekte gösterildiği gibi System.Collections.IEnumerable veya System.Collections.Generic.IEnumerable<T> arabirimini uygulayan türlerin bir örneğindeki her öğe için bir deyim veya bir 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öntemin
GetEnumerator
dönüş türü, dönüş türüCurrent
olan publicMoveNext
özelliğine ve public parametresizbool
yöntemine sahiptir.
Aşağıdaki örnek, foreach
ifadesini, herhangi bir arayüzü uygulamayan System.Span<T> türünün bir örneği ile kullanır.
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
değiştiricisi ref readonly
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
foreach
deyiminin kaynak koleksiyonu boşsa, foreach
deyiminin gövdesi yürütülmez ve atlanır.
foreach
deyimi null
uygulanırsa, bir NullReferenceException fırlatılır.
await foreach ile koleksiyonu eşzamansız olarak yinelemek
Eşzamansız bir veri akışını, yani await foreach
arabirimini uygulayan koleksiyon türünü tüketmek için IAsyncEnumerable<T> deyimini kullanabilirsiniz. Sonraki öğe zaman uyumsuz olarak alınırken döngünün her yinelemesi askıya alınabilir. Aşağıdaki örnek, await foreach
ifadesini nasıl kullanacağınızı göstermektedir:
await foreach (var item in GenerateSequenceAsync())
{
Console.WriteLine(item);
}
Herhangi bir türün aşağıdaki koşulları karşılayan örneğiyle await foreach
deyimini de kullanabilirsiniz.
- Bir tür, genel parametresiz
GetAsyncEnumerator
yöntemine sahiptir. Bu yöntem bir türün uzantı yöntemi olabilir. -
GetAsyncEnumerator
yönteminin dönüş türü, publicCurrent
özelliğine ve dönüş türüMoveNextAsync
,Task<bool>
veya awaiter'ınValueTask<bool>
yöntemi birGetResult
değeri döndüren herhangi başka bir beklenebilir türe sahip olan public parametresizbool
yöntemine 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şzamanlama bağlamları ve geçerli bağlamı yakalama hakkında daha fazla bilgi için bkz. Görev tabanlı zaman uyumsuz deseni kullanma. Asenkron akışlar hakkında daha fazla bilgi için asenkron akışlar öğreticisine bakın.
Yineleme değişkeninin türü
Aşağıdaki kodda gösterildiği gibi derleyicinin deyimindeki var
bir yineleme değişkeninin türünü çıkarmasına izin vermek için anahtar sözcüğünü kullanabilirsiniz:
foreach (var item in collection) { }
Uyarı
var
Türü, derleyici tarafından, null farkındalık bağlamının etkin olup olmadığına ve başlatma ifadesinin türünün bir başvuru türü olup olmadığına bağlı olarak, 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 bir dönüştürmeden T
V
çalışma zamanında başarısız olursa, foreach
deyimi bir InvalidCastException oluşturur. Örneğin, T
mühürlenmemiş bir sınıf türüyse, V
, T
tarafından uygulanmasa bile herhangi bir arabirim türü olabilir. Çalışma zamanında, bir koleksiyon öğesi, T
'dan türetilen ve V
'ı uygulayan bir tür olabilir. Böyle bir durum söz konusu değilse, bir InvalidCastException oluşturulur.
do
ifadesi
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üdenwhile
farklıdır.
Aşağıdaki örnek, do
deyiminin kullanımını gösterir:
int n = 0;
do
{
Console.Write(n);
n++;
} while (n < 5);
// Output:
// 01234
while
ifadesi
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üdendo
farklıdır.
Aşağıdaki örnek, while
deyiminin kullanımını gösterir:
int n = 0;
while (n < 5)
{
Console.Write(n);
n++;
}
// Output:
// 01234
C# dil belirtimi
Daha fazla bilgi için C# dil belirtimininaşağıdaki bölümlerine bakın:
Bu özellikler hakkında daha fazla bilgi için aşağıdaki özellik teklifi notlarını inceleyin: