Pernyataan pilihan - if
, if-else
, dan switch
Pernyataan if
, if-else
dan switch
memilih pernyataan untuk dijalankan dari banyak jalur yang mungkin berdasarkan nilai ekspresi. Pernyataan menjalankan if
pernyataan hanya jika ekspresi Boolean yang disediakan mengevaluasi ke true
. Pernyataan ini if-else
memungkinkan Anda memilih salah satu dari dua jalur kode yang akan diikuti berdasarkan ekspresi Boolean. Pernyataan switch
memilih daftar pernyataan untuk dijalankan berdasarkan kecocokan pola dengan ekspresi.
Pernyataan if
Statement if
dapat berupa salah satu dari dua bentuk berikut:
Statement
if
denganelse
bagian memilih salah satu dari dua statement untuk dijalankan berdasarkan nilai Boolean expression, seperti yang ditunjukkan contoh berikut:DisplayWeatherReport(15.0); // Output: Cold. DisplayWeatherReport(24.0); // Output: Perfect! void DisplayWeatherReport(double tempInCelsius) { if (tempInCelsius < 20.0) { Console.WriteLine("Cold."); } else { Console.WriteLine("Perfect!"); } }
Statement
if
tanpaelse
bagian menjalankan isinya hanya jika Boolean expression mengevaluasi ketrue
, seperti yang ditunjukkan contoh berikut:DisplayMeasurement(45); // Output: The measurement value is 45 DisplayMeasurement(-3); // Output: Warning: not acceptable value! The measurement value is -3 void DisplayMeasurement(double value) { if (value < 0 || value > 100) { Console.Write("Warning: not acceptable value! "); } Console.WriteLine($"The measurement value is {value}"); }
Anda dapat menumpuk statement if
untuk memeriksa beberapa kondisi, seperti yang ditunjukkan contoh berikut:
DisplayCharacter('f'); // Output: A lowercase letter: f
DisplayCharacter('R'); // Output: An uppercase letter: R
DisplayCharacter('8'); // Output: A digit: 8
DisplayCharacter(','); // Output: Not alphanumeric character: ,
void DisplayCharacter(char ch)
{
if (char.IsUpper(ch))
{
Console.WriteLine($"An uppercase letter: {ch}");
}
else if (char.IsLower(ch))
{
Console.WriteLine($"A lowercase letter: {ch}");
}
else if (char.IsDigit(ch))
{
Console.WriteLine($"A digit: {ch}");
}
else
{
Console.WriteLine($"Not alphanumeric character: {ch}");
}
}
Dalam konteks expression, Anda dapat menggunakan operator kondisional ?:
untuk mengevaluasi salah satu dari dua expression berdasarkan nilai Boolean expression.
Pernyataan switch
Statement switch
memilih daftar statement untuk dijalankan berdasarkan kecocokan pola dengan expression kecocokan, seperti yang ditunjukkan contoh berikut:
DisplayMeasurement(-4); // Output: Measured value is -4; too low.
DisplayMeasurement(5); // Output: Measured value is 5.
DisplayMeasurement(30); // Output: Measured value is 30; too high.
DisplayMeasurement(double.NaN); // Output: Failed measurement.
void DisplayMeasurement(double measurement)
{
switch (measurement)
{
case < 0.0:
Console.WriteLine($"Measured value is {measurement}; too low.");
break;
case > 15.0:
Console.WriteLine($"Measured value is {measurement}; too high.");
break;
case double.NaN:
Console.WriteLine("Failed measurement.");
break;
default:
Console.WriteLine($"Measured value is {measurement}.");
break;
}
}
Pada contoh sebelumnya, expressionswitch
menggunakan pola berikut:
- Pola relasional: untuk membandingkan hasil ekspresi dengan konstanta.
- Pola konstanta: uji apakah hasil ekspresi sama dengan konstanta.
Penting
Untuk informasi tentang pola yang didukung oleh statement switch
, lihat Pola.
Contoh sebelumnya juga menunjukkan kasus ini default
. Kasus menentukan statement default
yang akan dijalankan saat expression kecocokan tidak cocok dengan pola kasus lainnya. Jika ekspresi kecocokan tidak cocok dengan pola kasus apa pun dan tidak default
ada kasus, kontrol jatuh melalui switch
pernyataan.
switch
statement menjalankan daftar statement di bagian switch pertama yang pola kasusnya cocok dengan expression kecocokan dan pengawal kasusnya, jika ada, mengevaluasi ke true
. Statement switch
mengevaluasi pola kasus dalam urutan teks dari atas ke bawah. Compiler menghasilkan error ketika statement switch
berisi kasus yang tidak dapat dijangkau. Itu adalah kasus yang sudah ditangani oleh huruf besar atau yang polanya tidak mungkin dicocokkan.
Catatan
Kasus ini default
dapat muncul di tempat mana pun dalam statement switch
. Terlepas dari posisinya, default
kasus dievaluasi hanya jika semua pola kasus lain tidak cocok atau goto default;
pernyataan dijalankan di salah satu bagian pengalihan.
Anda dapat menentukan beberapa pola kasus untuk satu bagian statement switch
, seperti yang ditunjukkan contoh berikut:
DisplayMeasurement(-4); // Output: Measured value is -4; out of an acceptable range.
DisplayMeasurement(50); // Output: Measured value is 50.
DisplayMeasurement(132); // Output: Measured value is 132; out of an acceptable range.
void DisplayMeasurement(int measurement)
{
switch (measurement)
{
case < 0:
case > 100:
Console.WriteLine($"Measured value is {measurement}; out of an acceptable range.");
break;
default:
Console.WriteLine($"Measured value is {measurement}.");
break;
}
}
Dalam pernyataan switch
, kontrol tidak dapat jatuh dari satu bagian pengalihan ke bagian berikutnya. Seperti yang ditunjukkan contoh di bagian ini, biasanya Anda menggunakan statement break
di akhir setiap bagian switch untuk meneruskan kontrol dari statementswitch
. Anda juga dapat menggunakan statementreturn dan throw untuk meneruskan kontrol dari statement switch
. Untuk meniru perilaku fall-through dan meneruskan kontrol ke bagian switch lain, Anda dapat menggunakan goto
statement.
Dimulai dengan C# 8.0, Anda menggunakan switch
expressionuntuk mengevaluasi expression tunggal dari daftar expression kandidat berdasarkan kecocokan pola dengan expression input.
Pelindung kasus
Pola kasus mungkin tidak cukup ekspresif untuk menentukan kondisi untuk eksekusi bagian switch. Dalam kasus seperti itu, Anda dapat menggunakan case guard. Itu adalah syarat tambahan yang harus dipenuhi bersama dengan pola yang cocok. Peindung kasus harus berupa ungkapan bersyarat. Anda menentukan pelindung kasus setelah kata kunci when
yang mengikuti pola, seperti yang ditunjukkan contoh berikut:
DisplayMeasurements(3, 4); // Output: First measurement is 3, second measurement is 4.
DisplayMeasurements(5, 5); // Output: Both measurements are valid and equal to 5.
void DisplayMeasurements(int a, int b)
{
switch ((a, b))
{
case (> 0, > 0) when a == b:
Console.WriteLine($"Both measurements are valid and equal to {a}.");
break;
case (> 0, > 0):
Console.WriteLine($"First measurement is {a}, second measurement is {b}.");
break;
default:
Console.WriteLine("One or both measurements are not valid.");
break;
}
}
Contoh sebelumnya menggunakan pola posisional dengan pola relasional bersarang.
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#:
Untuk informasi selengkapnya tentang pola, lihat bagian Pola dan pencocokan pola dari spesifikasi bahasa C#.