Share via


Kijelölési utasítások – if, if-elseés switch

A if, if-else és switch az utasítások számos lehetséges útvonalból kiválasztják a végrehajtandó utasításokat egy kifejezés értéke alapján. Az if utasítás csak akkor hajt végre utasítást, ha egy megadott logikai kifejezés kiértékeli a következőt true: . Az if-else utasítással kiválaszthatja, hogy a két kódútvonal közül melyiket kövesse logikai kifejezés alapján. Az switch utasítás kiválaszt egy utasításlistát, amely egy kifejezéssel egyező minta alapján hajtandó végre.

Az if utasítás

Az if utasítás a következő két űrlap bármelyike lehet:

  • Egy if részből álló else utasítás a logikai kifejezés értéke alapján végrehajtandó két utasítás egyikét választja ki, ahogyan az alábbi példa is mutatja:

    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!");
        }
    }
    
  • Egy if rész nélküli else utasítás csak akkor hajtja végre a törzsét, ha egy logikai kifejezés kiértékeli azt true, ahogy az alábbi példa mutatja:

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

Az utasításokat több feltétel ellenőrzéséhez is beágyazhatja if , ahogy az alábbi példa is mutatja:

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

Kifejezéskörnyezetben a feltételes operátorral ?: kiértékelheti a két kifejezés egyikét egy logikai kifejezés értéke alapján.

Az switch utasítás

Az switch utasítás kiválaszt egy utasításlistát, amely egy egyező kifejezéssel egyező minta alapján hajtandó végre, ahogy az alábbi példa is mutatja:

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

Az előző példában az utasítás a switch következő mintákat használja:

  • Relációs minta: egy kifejezés eredményének összehasonlítása állandóval.
  • Állandó minta: annak tesztelése, hogy egy kifejezés eredménye megegyezik-e egy állandóval.

Fontos

Az utasítás által támogatott mintákról további információt a switch Minták című témakörben talál.

Az előző példa az esetet is szemlélteti default . Az default eset olyan utasításokat ad meg, amelyeket akkor kell végrehajtani, ha egy egyező kifejezés nem egyezik más esetmintával. Ha egy egyező kifejezés nem egyezik a kis- és nagybetűk mintájával, és nincs default eset, akkor a vezérlés egy switch utasításon keresztül történik.

Az switch utasítás végrehajtja az utasításlistát az első kapcsolószakaszban , amelynek a kis- és nagybetűmintája megegyezik egy egyező kifejezéssel, és amelynek esetőrzője , ha van ilyen, kiértékeli a következőt true: . Az switch utasítás a kis- és nagybetűket szöveges sorrendben értékeli felülről lefelé. A fordító hibát okoz, ha egy switch utasítás elérhetetlen esetet tartalmaz. Ez egy olyan eset, amelyet már kezel egy nagybetű, vagy amelynek mintáját lehetetlen egyezni.

Feljegyzés

Az default eset bármely helyen megjeleníthető egy utasításban switch . A helyzetétől függetlenül a rendszer csak akkor értékeli ki az default esetet, ha az összes többi esetminta nem egyezik meg, vagy az goto default; utasítás végrehajtása az egyik kapcsolószakaszban történik.

Egy utasítás egy szakaszához több esetmintát switch is megadhat, ahogy az alábbi példa is mutatja:

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 Egy utasításon belül a vezérlő nem tud átesni egyik kapcsolószakaszból a másikba. Ahogy az ebben a szakaszban látható példák is mutatják, általában az break egyes kapcsolószakaszok végén található utasítással adja át a vezérlőt egy switch utasításból. A visszatérési és dobási utasításokkal is átadhatja az utasítás irányításátswitch. Az áteső viselkedés utánzásához és a vezérlő más kapcsolószakaszba való átviteléhez használhatja az utasítástgoto.

A kifejezéskörnyezetben a switch kifejezéssel egyetlen kifejezést értékelhet ki a jelölt kifejezések listájából egy kifejezéssel egyező minta alapján.

Esetőr

Előfordulhat, hogy a kis- és nagybetűk mintája nem elég kifejező a kapcsolószakasz végrehajtásának feltételének megadásához. Ilyen esetben használhatja az esetőrt. Ez egy további feltétel, amelyet egy egyeztetett mintával együtt kell teljesíteni. Az esetőrnek logikai kifejezésnek kell lennie. A mintát követő kulcsszó után when egy esetőrt kell megadnia, ahogy az alábbi példa is mutatja:

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

Az előző példa beágyazott relációs mintákkal rendelkező pozíciómintákat használ.

C# nyelvspecifikáció

További információt a C# nyelvspecifikációjának alábbi szakaszaiban talál:

A mintákról további információt a C# nyelv specifikációjának Minták és mintaegyező szakaszában talál.

Lásd még