Seçim deyimleri (C# başvurusu)

Aşağıdaki deyimler, bir ifadenin değerine göre bir dizi olası deyimden yürütülecek deyimleri seçer:

  • deyimiif: Boole ifadesinin değerine göre yürütülecek bir deyimi seçer.
  • deyimiswitch: bir ifadeyle desen eşleşmesini temel alarak yürütülecek bir deyim listesi seçer.

deyimi if

Deyim if aşağıdaki iki biçimden biri olabilir:

  • Bölümü if olan bir else deyim, aşağıdaki örnekte gösterildiği gibi boole ifadesinin değerine göre yürütülecek iki deyimden birini seçer:

    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!");
        }
    }
    
  • Bölümü if olmayan bir else deyim, gövdesini yalnızca aşağıdaki örnekte gösterildiği gibi Boole ifadesi olarak değerlendirilirse trueyürütür:

    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}");
    }
    

Aşağıdaki örnekte gösterildiği gibi, birden çok koşulu denetlemek için deyimleri iç içe if yerleştirebilirsiniz:

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}");
    }
}

İfade bağlamında, boole ifadesinin değerine göre iki ifadeden birini değerlendirmek için koşullu işlecini ?: kullanabilirsiniz.

deyimi switch

Deyimi, switch aşağıdaki örnekte gösterildiği gibi, eşleşme ifadesiyle bir desen eşleşmesine göre yürütülecek bir deyim listesi seçer:

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;
    }
}

Yukarıdaki örnekte deyimi switch aşağıdaki desenleri kullanır:

  • bir ifade sonucunu sabitle karşılaştırmak için ilişkisel desen (C# 9.0 ve sonraki sürümlerde kullanılabilir).
  • Bir ifade sonucunun sabite eşit olup olmadığını test etmek için sabit desen (C# 7.0 ve sonraki sürümlerde kullanılabilir).

Önemli

deyimi tarafından switch desteklenen desenler hakkında bilgi için bkz . Desenler.

Yukarıdaki örnekte de büyük/küçük harf gösterilmiştir default . Büyük default /küçük harf, eşleşme ifadesi başka bir büyük/küçük harf deseni ile eşleşmediğinde yürütülecek deyimleri belirtir. Eşleşme ifadesi herhangi bir büyük/küçük harf deseni ile eşleşmiyorsa ve büyük/küçük harf yoksa default denetim bir switch deyimden geçer.

Deyimiswitch, durum deseni eşleşme ifadesiyle eşleşen ve varsa büyük/küçük harf koruyucusu olarak değerlendirilen ilk switch bölümündedeyim listesini yürütürtrue. Deyim switch , büyük/küçük harf desenlerini yukarıdan aşağıya doğru metin sırasına göre değerlendirir. Derleyici, bir switch deyimi ulaşılamaz bir durum içerdiğinde bir hata oluşturur. Bu, zaten bir büyük harf tarafından işlenen veya deseni eşleşmesi imkansız olan bir durumdur.

Not

Durum, default bir deyimin içinde herhangi bir switch yerde görünebilir. Konumu ne olursa olsun, default servis talebi her zaman en son değerlendirilir ve yalnızca diğer tüm olay desenleri eşleşmediyse değerlendirilir.

Aşağıdaki örnekte gösterildiği gibi, deyimin bir switch bölümü için birden çok büyük/küçük harf deseni belirtebilirsiniz:

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;
    }
}

Bir switch deyim içinde denetim bir anahtar bölümünden diğerine geçemez. Bu bölümdeki örneklerde gösterildiği gibi, genellikle denetimi deyiminden switch geçirmek için her switch bölümünün sonundaki deyimini kullanırsınızbreak. Denetimi deyiminden switch geçirmek için return ve throw deyimlerini de kullanabilirsiniz. Düşme davranışını taklit etmek ve denetimi diğer switch bölümüne geçirmek için deyiminigoto kullanabilirsiniz.

İfade bağlamında, bir ifadeyle bir desen eşleşmesini switch temel alan aday ifadeler listesinden tek bir ifadeyi değerlendirmek için ifadeyi kullanabilirsiniz.

Servis talebi korumaları

Durum deseni, switch bölümünün yürütülmesi için koşulu belirtmek için yeterince açıklayıcı olmayabilir. Böyle bir durumda servis talebi koruyucusu kullanabilirsiniz. Bu, eşleşen bir desenle birlikte karşılanması gereken ek bir koşuldur. Büyük/küçük harf koruyucu bir Boole ifadesi olmalıdır. Aşağıdaki örnekte gösterildiği gibi, bir deseni when izleyen anahtar sözcüğünden sonra bir büyük/küçük harf koruyucusu belirtirsiniz:

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;
    }
}

Yukarıdaki örnekte iç içe ilişkisel desenlerle konumsal desenler kullanılır.

Dil sürümü desteği

deyimi, switch C# 7.0 ile başlayan desen eşleştirmeyi destekler. O zamandan beri her ana C# sürümü yeni desen türleri ekler. Daha fazla bilgi için bkz . Desenler.

C# 6 ve önceki sürümlerde deyimini switch aşağıdaki sınırlamalarla kullanırsınız:

C# dili belirtimi

Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın:

C# 7.0 ve sonraki sürümlerde sunulan özellikler hakkında daha fazla bilgi için aşağıdaki özellik teklifi notlarını inceleyin:

Ayrıca bkz.