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 dengan else 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 tanpa else bagian menjalankan isinya hanya jika Boolean expression mengevaluasi ke true, 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 breakdi 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#.

Lihat juga