Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Tip
Cet article fait partie de la section Notions de base pour les développeurs qui connaissent déjà au moins un langage de programmation et apprennent C#. Si vous débutez avec la programmation, commencez par commencer par les didacticiels De prise en main . Pour obtenir la syntaxe complète, consultez les instructions de sélection dans la référence de langage.
Venant d’une autre langue ? C++, Java et JavaScript héritent tous du C, donc if, else et switch se lisent de la même façon en C#. La seule différence à noter : C# interdit l’enchaînement implicite entre des cas non vides switch, et chaque étiquette case peut tester un motif plutôt qu’une simple constante. Si vous venez de Python, le if/else if/else de C# correspond à if/elif/else, et le switch basé sur les motifs de C# est ce qui se rapproche le plus de l’instruction match de Python.
Les instructions de sélection choisissent le bloc de code exécuté en fonction d’une condition. C# propose deux constructions : if (avec un else facultatif) pour effectuer un branchement selon une valeur booléenne, et switch pour comparer une valeur à plusieurs cas. Une expression booléenne est une expression qui s’évalue à true ou false, comme la comparaison temperature >= 25.
Branchez avec if et else
Une if instruction exécute son bloc uniquement lorsque son expression booléenne est true. Ajoutez un else bloc pour fournir le code qui s’exécute lorsque la condition est false:
int temperature = 28;
// An if statement runs its block only when the condition is true.
// The else block runs when the condition is false.
if (temperature >= 25)
{
Console.WriteLine("Warm"); // => Warm
}
else
{
Console.WriteLine("Cool");
}
Le corps d’une if instruction ou else est une instruction unique, telle qu’une affectation ou un appel de méthode. Un bloc d’instructions est en lui-même une instruction unique qui englobe zéro, une ou plusieurs instructions entre accolades ({ }).
De nombreuses normes de codage préconisent de placer les blocs des branches entre accolades, même lorsqu’elles ne contiennent qu’une seule instruction. Les accolades rendent la portée explicite. Cela évite une erreur courante : ajouter plus tard une deuxième ligne que vous pensez exécuter conditionnellement, mais qui s’exécute en réalité de façon inconditionnelle. Seuls les accolades déterminent quelles instructions appartiennent à la branche. C# ne traite pas les espaces blancs comme significatifs, de sorte que la mise en retrait seule ne le fait jamais. Les accolades sont autorisées même autour d’une seule ligne : le bloc est l’unique instruction que la branche exécute. Indentez votre code pour en améliorer la lisibilité, mais fiez-vous aux accolades pour définir le bloc.
Tester plusieurs conditions avec else if
Pour choisir parmi plus de deux chemins, chaînez les conditions avec else if. C# évalue chaque condition dans l’ordre et exécute le premier bloc dont la condition est true, puis ignore le reste. Une dernière else gère tous les cas restants :
int score = 82;
// Chain conditions with else if. The first branch whose condition is
// true runs; the compiler skips the rest.
string grade;
if (score >= 90)
{
grade = "A";
}
else if (score >= 80)
{
grade = "B";
}
else if (score >= 70)
{
grade = "C";
}
else
{
grade = "F";
}
Console.WriteLine(grade); // => B
L’ordre est important dans une chaîne. Étant donné que la première condition correspondante gagne, placez d’abord les conditions les plus spécifiques. Dans l’exemple précédent, tester score >= 80 avant score >= 70 garantit qu’un score de 82 correspond à "B" plutôt qu’à "C".
Associer une valeur à une switch instruction
Lorsque vous comparez une seule valeur à de nombreux cas discrets, une instruction switch est plus claire qu’une longue chaîne else if. Comme if, l’instruction switch est une instruction de branchement : elle choisit le code à exécuter. Chaque case étiquette répertorie une valeur à mettre en correspondance, et chaque case section se termine par une break instruction. Empilez les étiquettes pour partager un corps, et utilisez la section default pour les valeurs qui ne correspondent à aucun cas :
DayOfWeek day = DayOfWeek.Saturday;
// A switch statement compares one value against several case labels.
// Stacked labels share a body. Each section ends with break, and the
// default section runs when no case matches.
switch (day)
{
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
Console.WriteLine("Weekend"); // => Weekend
break;
default:
Console.WriteLine("Weekday");
break;
}
Contrairement à C et à Java, C# n'autorise pas l'exécution à passer d'une section non vide case à la suivante. Chaque section contenant du code doit se terminer par une break (ou une autre instruction de saut, comme return ou goto). Cette règle empêche les bogues de passage accidentels courants dans ces langues.
Modèles de test avec case et when
Une case étiquette n’est pas limitée aux valeurs constantes. Il peut tester un modèle, qui est une règle qui décrit la forme ou la valeur des données. Un modèle relationnel tel que < 0 correspond à une valeur inférieure à zéro. Ajoutez une when clause afin d’ajouter une condition supplémentaire qui doit également être remplie true pour que le cas corresponde :
int measurement = 42;
// A case label can test a pattern instead of a constant. A when clause
// adds a condition that must also be true for the case to match.
switch (measurement)
{
case < 0:
Console.WriteLine("Negative");
break;
case 0:
Console.WriteLine("Zero");
break;
case > 0 when measurement % 2 == 0:
Console.WriteLine("Positive and even"); // => Positive and even
break;
default:
Console.WriteLine("Positive and odd");
break;
}
Les cas basés sur des modèles sont évalués en haut en bas, de sorte que les modèles plus spécifiques appartiennent avant plusieurs modèles généraux. Pour obtenir le catalogue complet de modèles, consultez la mise en correspondance des modèles.
Sélectionner une valeur avec une expression
Les if instructions et switch déterminent le code qui s’exécute. Lorsque vous devez plutôt choisir une valeur, utilisez une expression. Une expression prend la valeur d’une valeur, de sorte que vous pouvez l’utiliser n’importe où une valeur est attendue, telle que le côté droit d’une affectation ou un argument de méthode. C# propose des formulaires d’expression qui sélectionnent une valeur à partir d’alternatives telles que l’opérateur conditionnel et l’expression switch .
Opérateur conditionnel ?:
L’opérateur ?: conditionnel choisit l’une des deux valeurs en fonction d’une condition booléenne.
Pour sa syntaxe, son comportement de court-circuit et ses conseils sur son choix au lieu de if/else, consultez l’opérateur ?:conditionnel .
Expression switch
Une switch expression est l’équivalent de l’expression de l’instruction switch . Au lieu d’exécuter du code dans le cas correspondant, il s’évalue en une valeur. Il est plus concis que d’affecter une valeur dans chaque bras d’une switch instruction, et le compilateur vous avertit lorsque les bras ne couvrent pas toutes les entrées possibles. L’expression switch est un élément central du filtrage par motif. Pour savoir quand et comment l’utiliser, consultez la correspondance des modèles et la référence d’expressionswitch.