Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Urvalsuttryck -
Instruktionen if, if-else och switch väljer instruktioner som ska köras från många möjliga sökvägar baserat på värdet för ett uttryck. 
              Instruktionenif kör endast en -instruktion om ett angivet booleskt uttryck utvärderas till true. Med instruktionenif-else kan du välja vilken av de två kodsökvägarna som ska följas baserat på ett booleskt uttryck. 
              Instruktionenswitch väljer en instruktionslista som ska köras baserat på en mönstermatchning med ett uttryck.
Påståendet if
En if instruktion kan vara något av följande två formulär:
- En - if-instruktion med en- elsedel väljer en av de två uttryck som ska köras baserat på värdet för ett booleskt uttryck, som följande exempel visar:- 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!"); } }
- En - ifinstruktion utan en- elsedel kör endast dess brödtext om ett booleskt uttryck utvärderas till- true, som följande exempel visar:- 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}"); }
Du kan kapsla if instruktioner för att kontrollera flera villkor, som följande exempel visar:
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}");
    }
}
I en uttryckskontext kan du använda villkorsoperatorn ?: för att utvärdera ett av de två uttrycken baserat på värdet för ett booleskt uttryck.
Påståendet switch
Instruktionen switch väljer en instruktionslista som ska köras baserat på en mönstermatchning med ett matchningsuttryck, som följande exempel visar:
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;
    }
}
I föregående exempel använder -instruktionen switch följande mönster:
- Ett relationsmönster: för att jämföra ett uttrycksresultat med en konstant.
- Ett konstant mönster: testa om ett uttrycksresultat är lika med en konstant.
Viktigt!
Information om de mönster som stöds av -instruktionen switch finns i Mönster.
Föregående exempel visar också fallet default . Fallet default anger instruktioner som ska köras när ett matchningsuttryck inte matchar något annat skiftlägesmönster. Om ett matchningsuttryck inte matchar något skiftlägesmönster och det inte finns något default skiftläge, faller kontrollen igenom en switch -instruktion.
En switch -instruktion kör instruktionslistan i det första växelavsnittet vars skiftlägesmönster matchar ett matchningsuttryck och vars skiftlägesskydd, om det finns, utvärderas till true. En switch instruktion utvärderar skiftlägesmönster i textordning uppifrån och ned. Kompilatorn genererar ett fel när en switch instruktion innehåller ett ärende som inte kan nås. Det är ett fall som redan hanteras av ett versaler eller vars mönster är omöjligt att matcha.
Anmärkning
Ärendet default kan visas på valfri plats i en switch -instruktion. Oavsett position default utvärderas ärendet endast om alla andra skiftlägesmönster inte matchas eller om -instruktionen goto default; körs i något av växelavsnitten.
Du kan ange flera skiftlägesmönster för ett avsnitt i en switch -instruktion, som följande exempel visar:
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;
    }
}
I en switch instruktion kan kontrollen inte falla igenom från ett växlingsavsnitt till nästa. Som exemplen i det här avsnittet visar använder du vanligtvis -instruktionen break i slutet av varje switch-avsnitt för att skicka kontroll ut ur en switch instruktion. Du kan också använda retur - och utkastsinstruktionerna för att skicka kontrollen från en switch -instruktion. Om du vill imitera fall-through-beteendet och skicka kontroll till andra växelavsnitt kan du använda -instruktionengoto.
Viktigt!
Varje växelavsnitt måste sluta med , breakgoto eller return. Om du går igenom från ett växelavsnitt till nästa genereras ett kompilatorfel. Flera växeletiketter kan dock tillämpas på samma växelavsnitt, som case < 0: i exemplet ovan. Det här avsiktliga designvalet gör det möjligt att kortfattat hantera flera fall som delar samma eller beroende logik.
I en uttryckskontext kan du använda switch uttrycket för att utvärdera ett enda uttryck från en lista över kandidatuttryck baserat på en mönstermatchning med ett uttryck.
Viktigt!
Skillnader mellan switchuttryck och switch-instruktion:
- switch-instruktionen används för att styra körningsflödet i ett kodblock.
- switch-uttryck används vanligtvis i kontexter av värderetur och värdetilldelning, ofta som en uttrycks-bodied medlemmar.
- ett skiftuttrycksfall får inte vara tomt, kan en switch-instruktion .
Skiftlägesskydd
Ett skiftlägesmönster kanske inte är tillräckligt uttrycksfullt för att ange villkoret för körningen av växelavsnittet. I sådana fall kan du använda ett skiftlägesskydd. Det är ett ytterligare villkor som måste uppfyllas tillsammans med ett matchat mönster. Ett skiftlägesskydd måste vara ett booleskt uttryck. Du anger ett skiftlägesskydd efter nyckelordet when som följer ett mönster, vilket visas i följande exempel:
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;
    }
}
I föregående exempel används positionsmönster med kapslade relationsmönster.
Språkspecifikation för C#
Mer information finns i följande avsnitt i C#-språkspecifikationen:
Mer information om mönster finns i avsnittet Mönster och mönstermatchning i C#-språkspecifikationen.