Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pernyataan perulangan -
Pernyataan iterasi secara berulang mengeksekusi sebuah pernyataan atau blok pernyataan. Pernyataan menjalankan for
isinya sementara ekspresi Boolean tertentu mengevaluasi ke true
. Pernyataan ini foreach
menghitung elemen koleksi dan mengeksekusi isinya untuk setiap elemen koleksi. Pernyataan secara do
kondisional mengeksekusi isinya satu atau beberapa kali. Pernyataan ini while
secara kondisional mengeksekusi nol isinya atau lebih kali.
Pada titik mana pun dalam isi pernyataan iterasi, Anda dapat keluar dari perulangan menggunakan break
pernyataan . Anda dapat melangkah ke iterasi berikutnya dalam perulangan menggunakan continue
pernyataan .
Pernyataan for
Pernyataan for
menjalankan pernyataan atau blok pernyataan sementara ekspresi Boolean tertentu bernilai true
. Contoh berikut menunjukkan for
pernyataan yang menjalankan isinya sementara penghitung bilangan bulat kurang dari tiga:
for (int i = 0; i < 3; i++)
{
Console.Write(i);
}
// Output:
// 012
Contoh sebelumnya menunjukkan elemen for
pernyataan:
Bagian penginisialisasi yang dijalankan hanya sekali, sebelum memasuki perulangan. Biasanya, Anda mendeklarasikan dan menginisialisasi variabel perulangan lokal di bagian tersebut. Variabel yang dideklarasikan tidak dapat diakses dari luar
for
pernyataan.Bagian penginisialisasi dalam contoh sebelumnya menyatakan dan menginisialisasi variabel penghitung bilangan bulat:
int i = 0
Bagian kondisi yang menentukan apakah iterasi berikutnya dalam perulangan harus dijalankan. Jika dievaluasi ke
true
atau tidak ada, iterasi berikutnya dijalankan; jika tidak, perulangan dihentikan. Bagian kondisi harus berupa ekspresi Boolean.Bagian kondisi dalam contoh sebelumnya memeriksa apakah nilai penghitung kurang dari tiga:
i < 3
Bagian iterator yang menentukan apa yang terjadi setelah setiap eksekusi isi perulangan.
Bagian iterator dalam contoh sebelumnya meningkatkan penghitung:
i++
Isi perulangan, yang harus menjadi pernyataan atau blok pernyataan.
Bagian iterator dapat berisi nol atau beberapa ekspresi pernyataan berikut, dipisahkan dengan koma:
- prefiks atau postfiks ekspresi kenaikan, seperti
++i
ataui++
- prefiks atau postfiks ekspresi penurunan, seperti
--i
ataui--
- tugas
- pemanggilan sebuah metode
-
await
Ekspresi - pembuatan objek dengan menggunakan
new
operator
Jika Anda tidak mendeklarasikan variabel perulangan di bagian inisialisasi, Anda dapat menggunakan nol atau lebih ekspresi dari daftar sebelumnya di bagian inisialisasi juga. Contoh berikut menunjukkan beberapa penggunaan yang kurang umum dari bagian inisialisasi dan iterator: menetapkan nilai ke variabel eksternal di bagian penginisialisasi, memanggil metode di bagian inisialisasi dan iterator, dan mengubah nilai dua variabel di bagian iterator:
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
Semua bagian for
pernyataan bersifat opsional. Misalnya, kode berikut menentukan perulangan tak terbatas for
:
for ( ; ; )
{
//...
}
Pernyataan foreach
Pernyataan foreach
menjalankan pernyataan atau blok pernyataan untuk setiap elemen dalam instans jenis yang mengimplementasikan antarmuka System.Collections.IEnumerable atau System.Collections.Generic.IEnumerable<T>, seperti yang ditunjukkan dalam contoh berikut:
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
Pernyataan foreach
tidak terbatas pada jenis tersebut. Anda dapat menggunakannya dengan instans jenis apa pun yang memenuhi kondisi berikut:
- Jenis memiliki metode publik tanpa parameter
GetEnumerator
. MetodeGetEnumerator
dapat menjadi metode ekstensi suatu jenis. - Jenis pengembalian metode
GetEnumerator
memiliki properti publikCurrent
dan metode publikMoveNext
yang tidak memiliki parameter, yang jenis pengembaliannya adalahbool
.
Contoh berikut menggunakan pernyataan foreach
dengan instans tipe System.Span<T>, yang tidak mengimplementasikan antarmuka apa pun.
Span<int> numbers = [3, 14, 15, 92, 6];
foreach (int number in numbers)
{
Console.Write($"{number} ");
}
// Output:
// 3 14 15 92 6
Jika properti enumerator Current
mengembalikan nilai pengembalian referensi (ref T
di mana T
adalah jenis elemen koleksi), Anda dapat mendeklarasikan variabel iterasi dengan pengubah ref
atau ref readonly
, seperti yang ditunjukkan contoh berikut:
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
Jika kumpulan foreach
sumber pernyataan kosong, isi foreach
pernyataan tidak dijalankan dan dilewati.
foreach
Jika pernyataan tersebut diterapkan pada null
, maka NullReferenceException akan dilemparkan.
menunggu foreach
Anda dapat menggunakan pernyataan await foreach
untuk mengonsumsi aliran data asinkron, yaitu collection type yang mengimplementasikan antarmuka IAsyncEnumerable<T>. Setiap iterasi perulangan dapat ditangguhkan sementara elemen berikutnya diambil secara asinkron. Contoh berikut menunjukkan cara menggunakan await foreach
pernyataan:
await foreach (var item in GenerateSequenceAsync())
{
Console.WriteLine(item);
}
Anda juga dapat menggunakan await foreach
pernyataan dengan instans jenis apa pun yang memenuhi kondisi berikut:
- Jenis memiliki metode publik tanpa parameter
GetAsyncEnumerator
. Metode itu bisa menjadi jenis metode ekstensi. - Jenis pengembalian metode
GetAsyncEnumerator
memiliki properti publikCurrent
dan metode publik tanpa parameterMoveNextAsync
yang jenis pengembaliannya adalahTask<bool>
,ValueTask<bool>
, atau jenis lain yang dapat ditunggu, di mana metode penanamGetResult
mengembalikan nilaibool
.
Secara default, elemen stream diproses dalam konteks yang diambil. Jika Anda ingin menonaktifkan pengambilan konteks, gunakan TaskAsyncEnumerableExtensions.ConfigureAwait metode ekstensi. Untuk informasi selengkapnya tentang konteks sinkronisasi dan menangkap konteks saat ini, lihat Menggunakan pola asinkron berbasis Tugas. Untuk informasi selengkapnya tentang aliran asinkron, lihat tutorial Aliran asinkron.
Jenis variabel perulangan
Anda dapat menggunakan var
kata kunci untuk membiarkan pengkompilasi menyimpulkan jenis variabel iterasi dalam foreach
pernyataan, seperti yang ditunjukkan oleh kode berikut:
foreach (var item in collection) { }
Nota
Jenis var
dapat disimpulkan oleh pengkompilasi sebagai jenis referensi nullable, tergantung pada apakah konteks sadar null diaktifkan dan apakah jenis ekspresi inisialisasi adalah jenis referensi.
Untuk informasi selengkapnya, lihat Variabel lokal yang ditik secara implisit.
Anda juga dapat secara eksplisit menentukan jenis variabel iterasi, seperti yang ditunjukkan oleh kode berikut:
IEnumerable<T> collection = new T[5];
foreach (V item in collection) { }
Dalam bentuk sebelumnya, jenis T
elemen koleksi harus secara implisit atau eksplisit dapat dikonversi ke jenis V
variabel iterasi. Jika konversi eksplisit dari T
ke V
gagal pada waktu proses, foreach
pernyataan akan melempar InvalidCastException. Misalnya, jika T
adalah jenis kelas yang tidak disegel, V
dapat berupa jenis antarmuka apa pun, bahkan jenis yang T
tidak diterapkan. Pada run time, jenis elemen koleksi mungkin yang berasal dari T
dan benar-benar mengimplementasikan V
. Jika itu tidak terjadi, InvalidCastException akan dilempar.
Pernyataan do
Pernyataan do
menjalankan pernyataan atau blok pernyataan sementara ekspresi Boolean tertentu bernilai true
. Karena ekspresi tersebut dievaluasi setelah setiap eksekusi perulangan, perulangan do
dijalankan satu atau beberapa kali. Perulangan do
berbeda dari perulanganwhile
, yang mengeksekusi nol atau lebih kali.
Contoh berikut menunjukkan penggunaan do
pernyataan:
int n = 0;
do
{
Console.Write(n);
n++;
} while (n < 5);
// Output:
// 01234
Pernyataan while
Pernyataan while
menjalankan pernyataan atau blok pernyataan sementara ekspresi Boolean tertentu bernilai true
. Karena ekspresi tersebut dievaluasi sebelum setiap eksekusi perulangan, perulangan while
dieksekusi nol kali atau lebih. Perulangan while
berbeda dari perulangando
, yang mengeksekusi satu atau beberapa kali.
Contoh berikut menunjukkan penggunaan while
pernyataan:
int n = 0;
while (n < 5)
{
Console.Write(n);
n++;
}
// Output:
// 01234
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#:
Untuk informasi selengkapnya tentang fitur-fitur ini, lihat catatan proposal fitur berikut ini: