Instructions de sélection : if
if-else
et switch
Les instructions if
, if-else
et switch
sélectionnent les instructions à exécuter parmi différents chemins possibles en fonction de la valeur d’une expression. L’if
instruction exécute une instruction uniquement si une expression booléenne fournie prend la valeur true
. L’if-else
instruction vous permet de choisir les deux chemins de code à suivre en fonction d’une expression booléenne. L’switch
instruction sélectionne une liste d’instructions à exécuter sur la base de critères spéciaux avec une expression.
Instruction if
Une instruction if
peut se présenter sous l’une des deux formes suivantes :
Une instruction
if
comportant une partieelse
sélectionne l’une des deux instructions à exécuter en fonction de la valeur d’une expression booléenne, comme l’illustre l’exemple suivant :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!"); } }
Une instruction
if
sans partieelse
n’exécute son corps que si une expression booléenne prend la valeurtrue
, comme l’illustre l’exemple suivant :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}"); }
Vous pouvez imbriquer des instructions if
pour vérifier différentes conditions, comme l’illustre l’exemple suivant :
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}");
}
}
Dans le contexte d’une expression, vous pouvez utiliser l’opérateur conditionnel ?:
pour évaluer l’une des deux expressions en fonction de la valeur d’une expression booléenne.
Instruction switch
L’instruction switch
sélectionne une liste d’instructions à exécuter en fonction de critères spéciaux avec une expression de correspondance, comme l’illustre l’exemple suivant :
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;
}
}
Dans l’exemple précédent, l’instruction switch
utilise les modèles suivants :
- Un modèle relationnel : pour comparer un résultat d’expression à une constante.
- Modèle constant : permet de tester si le résultat d’une expression est égal à une constante.
Important
Pour plus d’informations sur les modèles pris en charge par l’instruction switch
, consultez Modèles.
L’exemple précédent illustre également la casse default
. La casse default
spécifie les instructions à exécuter lorsqu’une expression de correspondance ne correspond à aucun autre modèle de casse. Si une expression de correspondance ne correspond à aucun modèle de casse et qu’il n’y a pas de casse default
, le contrôle passe à une instruction switch
.
Une instruction switch
exécute la liste d’instructions de la première section switch dont le modèle de casse correspond à une expression de correspondance et dont la protection contre la casse, le cas échéant, prend la valeur true
. Une instruction switch
évalue les modèles de casse dans l’ordre du texte, de haut en bas. Le compilateur génère une erreur lorsqu’une instruction switch
contient une casse inaccessible. Il s’agit d’une casse déjà traitée par une majuscule ou dont le modèle est impossible à mettre en correspondance.
Notes
La casse default
peut apparaître à n’importe quel emplacement d’une instruction switch
. Quelle que soit sa position, le cas default
est évalué uniquement si tous les autres modèles de cas ne sont pas mis en correspondance ou si l’instruction goto default;
est exécutée dans l’une des sections switch.
Vous pouvez spécifier plusieurs modèles de casse pour une section d’une instruction switch
, comme l’illustre l’exemple suivant :
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;
}
}
Dans une instruction switch
, le contrôle ne peut pas passer d’une section switch à une autre. Comme le montrent les exemples de cette section, l’instruction break
est généralement utilisée à la fin de chaque section switch pour transmettre le contrôle à partir d’une instruction switch
. Vous pouvez également utiliser les instructions return et throw pour transmettre le contrôle à partir d’une instruction switch
. Pour imiter le comportement de passage et transmettre le contrôle à d’autres sections switch, vous pouvez utiliser l’instruction goto
.
Dans le contexte d’une expression, vous pouvez utiliser l’expression switch
pour évaluer une seule expression à partir d’une liste d’expressions candidates basées sur des critères spéciaux avec une expression.
Protections contre la casse
Un modèle de casse peut ne pas être suffisamment expressif pour spécifier la condition d’exécution de la section switch. Dans ce cas, vous pouvez utiliser une protection contre la casse. Il s’agit d’une condition supplémentaire qui doit être satisfaite avec un modèle correspondant. Une protection contre la casse doit être une expression booléenne. Vous spécifiez une protection contre la casse après le mot clé when
qui suit un modèle, comme l’illustre l’exemple suivant :
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;
}
}
L’exemple précédent utilise des modèles positionnels avec des modèles relationnels imbriqués.
spécification du langage C#
Pour plus d’informations, consultez les sections suivantes de la spécification du langage C# :
Pour plus d’informations sur les modèles, consultez la section Modèles et correspondances de modèles de la spécification du langage C#.