Seçim deyimleri (C# Başvurusu)

Aşağıdaki deyimler bir ifadenin değerine bağlı olarak bir dizi olası deyimden yürütülecek deyimleri seçer:

  • if Deyimi: bir Boolean ifadesinin değerine göre yürütülecek bir deyim seçer.
  • switch Deyimi: bir ifade ile eşleşen bir ifadeye göre yürütülecek bir deyim listesi seçer.

ifİfade

Bir if ifade aşağıdaki iki formdan herhangi biri olabilir:

  • if else Aşağıdaki örnekte gösterildiği gibi, bölümü olan bir deyimi, bir Boolean 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!");
        }
    }
    
  • if else true Aşağıdaki örnekte gösterildiği gibi, bölümü olmayan bir deyim, yalnızca bir Boole ifadesi olarak değerlendirilirse, gövdesini yü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}");
    }
    

ifAşağıdaki örnekte gösterildiği gibi birden çok koşulu denetlemek için deyimlerini iç içe geçirebilirsiniz:

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

Bir ifade bağlamında, bir Boolean ifadesinin değerine göre iki ifadeden birini değerlendirmek için koşullu işleci ?: kullanabilirsiniz.

switchİfade

switchDeyimi, aşağıdaki örnekte gösterildiği gibi, Match ifadesiyle bir model eşleşmesi temelinde 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, switch ifade aşağıdaki desenleri kullanır:

  • İlişkisel bir model: bir ifade sonucunu bir sabit ile karşılaştırmak için.
  • Sabit bir model: bir ifade sonucunun bir sabit değere eşit olup olmadığını test etmek için.

Önemli

Deyimin desteklediği desenler hakkında daha fazla bilgi için switch bkz. Patterns.

Yukarıdaki örnekte de default durum gösterilmektedir. defaultDurum, bir eşleşme ifadesi başka bir durum düzeniyle eşleşmediği zaman yürütülecek deyimleri belirtir. Bir eşleşme ifadesi herhangi bir Case düzeniyle eşleşmiyorsa ve böyle bir durum yoksa default , denetim bir deyim aracılığıyla düşer switch .

switchDeyim, durum deseninin eşleşme ifadesiyle eşleşen ve durum koruyucusuvarsa, olarak değerlendirilen ilk anahtar bölümündeki deyim listesini yürütür true . Bir switch ifade, metin düzeninde büyük/küçük harf desenlerini en üstten alta değerlendirir. Bir switch ifade ulaşılamaz durumda bir durum içerdiğinde derleyici bir hata oluşturur. Bu, büyük bir büyük/küçük harf tarafından zaten işlenmiş olan veya deseninin eşleşmesi olanaksız olduğu bir durumdur.

Not

defaultDurum, bir deyimin içinde herhangi bir yerde görünebilir switch . Konumundan bağımsız olarak, default büyük/küçük harf her zaman en son değerlendirilir ve yalnızca diğer tüm Case desenleri eşleştirilmez.

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

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 bildirimde, denetim bir geçiş bölümünden bir sonrakine geçemez. Bu bölümdeki örneklerde gösterildiği gibi, genellikle break her anahtar bölümünün sonundaki ifadeyi kullanarak denetimi bir deyimin dışına geçitirsiniz switch . Ayrıca Return ve throw deyimlerini kullanarak bir deyimin dışına denetimi geçirebilirsiniz switch . Başarısızlık davranışını taklit etmek ve denetimi başka bir anahtara geçirmek için, goto ifadesinikullanabilirsiniz.

Bir ifade bağlamında, ifadesi ile bir ifade eşleşmesi temelinde aday ifadeler listesinden tek bir ifadeyi değerlendirmek için switch ifadesini kullanabilirsiniz.

Örnek olay koruyucuları

Bir durum deseninin, anahtar bölümünün yürütülmesi koşulunu belirtmek için yeterince ifade edilebilir. Böyle bir durumda, bir Case Guard kullanabilirsiniz. Bu, eşleşen bir Düzenle birlikte karşılanması gereken ek bir durumdur. Case Guard bir Boole ifadesi olmalıdır. whenAşağıdaki örnekte gösterildiği gibi, bir kalıbı izleyen anahtar sözcükten sonra bir Case Guard 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 örnek, iç içe geçmiş ilişkisel desenlerle konumsal desenler kullanır.

Dil sürümü desteği

switchİfade C# 7,0 ile başlayarak model eşleştirmeyi destekler.

C# 6 ve önceki sürümlerde, switch aşağıdaki sınırlamalara sahip ifadesini kullanın:

C# dili belirtimi

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

C# 7,0 ve üzeri sürümlerde sunulan özellikler hakkında daha fazla bilgi için aşağıdaki özellik teklifi notlarına bakın:

Ayrıca bkz.