Příkazy výběru - if, if-elsea switch

if-else Příkazy ifa switch příkazy select příkazy, které se mají provést z mnoha možných cest na základě hodnoty výrazu. Příkaz if spustí příkaz pouze v případě, že se zadaný logický výraz vyhodnotí jako true. Příkaz if-else umožňuje zvolit, které ze dvou cest kódu se mají sledovat na základě logického výrazu. Příkaz switch vybere seznam příkazů, který se má spustit na základě shody vzoru s výrazem.

Příkaz if

Příkaz if může být libovolný z následujících dvou forem:

  • Příkaz if s else částí vybere jeden ze dvou příkazů, které se mají provést na základě hodnoty logického výrazu, jak ukazuje následující příklad:

    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!");
        }
    }
    
  • Příkaz if bez else části provede jeho tělo pouze v případě, že se logický výraz vyhodnotí jako true, jak ukazuje následující příklad:

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

Příkazy můžete vnořit if a zkontrolovat více podmínek, jak ukazuje následující příklad:

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

V kontextu výrazu můžete pomocí podmíněného operátoru ?: vyhodnotit jeden ze dvou výrazů na základě hodnoty logického výrazu.

Příkaz switch

Příkaz switch vybere seznam příkazů, který se má provést na základě shody vzoru s výrazem shody, jak ukazuje následující příklad:

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

V předchozím příkladu switch příkaz používá následující vzory:

  • Relační vzor: porovnání výsledku výrazu s konstantou.
  • Konstantní vzor: Otestujte, jestli se výsledek výrazu rovná konstantě.

Důležité

Informace o vzorech podporovaných příkazem switch najdete v tématu Vzory.

Předchozí příklad také ukazuje default případ. Případ default určuje příkazy, které se mají provést, když se výraz shody neshoduje s žádným jiným vzorem případu. Pokud se výraz shody neshoduje s žádným vzorem případu a neexistuje žádný default případ, ovládací prvek projde příkazem switch .

Příkaz spustí seznam příkazů v první části přepínače, jejíž vzor případu odpovídá výrazu shody a jehož případová ochrana, pokud existuje, se vyhodnotí jako true.switch Příkaz switch vyhodnocuje vzory velkých a malých písmen v textovém pořadí shora dolů. Kompilátor vygeneruje chybu, pokud switch příkaz obsahuje nedostupný případ. To je případ, který je již zpracován velkými písmeny nebo jehož vzor není možné spárovat.

Poznámka:

Případ default se může objevit na libovolném switch místě v rámci příkazu. Bez ohledu na jeho pozici se případ vyhodnotí pouze v případě, default že se neshodují všechny ostatní vzory případů nebo se goto default; příkaz spustí v některé z částí switch.

Pro jednu část switch příkazu můžete zadat více vzorů případů, jak ukazuje následující příklad:

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

switch V rámci příkazu nemůže ovládací prvek projít z jednoho oddílu přepínače na další. Jak ukazuje příklad v této části, obvykle používáte break příkaz na konci každého oddílu přepínače k předání kontroly z switch příkazu. Příkazy return a throw můžete také použít k předání kontroly příkazuswitch. Pokud chcete napodobovat pádové chování a předat řízení do jiné části přepínače, můžete použít goto příkaz.

V kontextu výrazu můžete pomocí výrazu switch vyhodnotit jeden výraz ze seznamu kandidátských výrazů na základě shody vzoru s výrazem.

Kryty případu

Vzor případu nemusí být dostatečně výrazný, aby určil podmínku pro spuštění oddílu přepínače. V takovém případě můžete použít ochranu případu. To je další podmínka, která musí být splněna společně s odpovídajícím vzorem. Ochrana případu musí být logickým výrazem. Za klíčové slovo, které se řídí vzorem, zadáte ochranu when případu, jak ukazuje následující příklad:

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

Předchozí příklad používá poziční vzory s vnořenými relačními vzory.

specifikace jazyka C#

Další informace najdete v následujících částech specifikace jazyka C#:

Další informace o vzorech najdete v části Vzory a porovnávání vzorů specifikace jazyka C#.

Viz také