Maîtrisez if, else if, else, les opérateurs logiques et l’opérateur ternaire afin de contrôler clairement le flux d’exécution de tous vos programmes C#.

Conditions en C# : maîtriser if, else et ternaire
Une condition permet au programme de prendre une décision. Le code n’exécute alors une branche que si une expression booléenne vaut true.
Préparer les variables de l’exemple
Les extraits de cet épisode s’appuient sur ces valeurs, à placer en tête de Program.cs pour pouvoir tout exécuter :
decimal montant = 320m;
bool estMembre = true;
bool estPremium = false;
bool compteActif = true;
Changez-les pour observer quelle branche s’exécute : c’est la façon la plus rapide de comprendre l’ordre d’évaluation.
La structure if, else if, else
if (montant >= 500)
{
Console.WriteLine("Commande Premium");
}
else if (montant >= 200)
{
Console.WriteLine("Commande Standard");
}
else
{
Console.WriteLine("Petite commande");
}
Les conditions sont évaluées dans l’ordre. Dès qu’une condition est vraie, sa branche est exécutée et les suivantes sont ignorées. Placez donc les seuils du plus restrictif au plus général.
Combiner plusieurs critères
bool remiseAutorisee = montant >= 50 && estMembre;
bool livraisonOfferte = montant >= 100 || estPremium;
bool compteBloque = !compteActif;
| Opérateur | Signification |
|---|---|
&& | ET : les deux conditions doivent être vraies |
|| | OU : au moins une condition doit être vraie |
! | NON : inverse le booléen |
&& et || utilisent le court-circuit : la partie droite n’est pas évaluée si la partie gauche suffit déjà à déterminer le résultat.
Utiliser l’opérateur ternaire
Pour choisir entre deux valeurs simples :
string statut = estMembre ? "Membre fidélité" : "Client standard";
La syntaxe est condition ? valeurSiVrai : valeurSiFaux. Elle convient à une affectation courte, mais une cascade de ternaires devient vite illisible.
Calculer une remise
decimal tauxRemise;
if (montant >= 500)
{
tauxRemise = estMembre ? 0.25m : 0.20m;
}
else if (montant >= 200)
{
tauxRemise = estMembre ? 0.15m : 0.10m;
}
else if (montant >= 50 && estMembre)
{
tauxRemise = 0.05m;
}
else
{
tauxRemise = 0m;
}
decimal remise = montant * tauxRemise;
decimal total = montant - remise;
Console.WriteLine($"Total : {total:C2}");
Réduire l’imbrication avec un retour anticipé
Les early returns éliminent les branches inutiles :
if (montant < 0)
{
Console.WriteLine("Montant invalide.");
return;
}
// Le reste du programme sait que le montant est valide.
Cette forme facilite la lecture : les erreurs sont traitées tôt et le scénario normal reste peu indenté.
Comparer des chaînes correctement
== compare deux chaînes en tenant compte de la casse : "oui" == "OUI" vaut false. Pour une réponse saisie par un utilisateur, précisez la règle de comparaison :
string? reponse = Console.ReadLine();
if (string.Equals(reponse?.Trim(), "oui", StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("Confirmé.");
}
Trim() retire les espaces parasites et ?. évite une exception si ReadLine() retourne null.
Exercice : tarif d’un cinéma
Écrivez un programme qui lit l’âge du client et indique le tarif : gratuit avant 3 ans, 6 € jusqu’à 13 ans inclus, 9 € pour les adultes, 7 € à partir de 65 ans. Un étudiant de 14 à 25 ans paie 7 € s’il le déclare.
Voir une solution
Console.Write("Âge : ");
if (!int.TryParse(Console.ReadLine(), out int age) || age < 0)
{
Console.WriteLine("Âge invalide.");
return;
}
bool estEtudiant = false;
if (age is >= 14 and <= 25)
{
Console.Write("Étudiant ? (oui/non) : ");
estEtudiant = string.Equals(Console.ReadLine()?.Trim(), "oui", StringComparison.OrdinalIgnoreCase);
}
decimal tarif;
if (age < 3)
{
tarif = 0m;
}
else if (age <= 13)
{
tarif = 6m;
}
else if (age >= 65 || estEtudiant)
{
tarif = 7m;
}
else
{
tarif = 9m;
}
Console.WriteLine(tarif == 0m ? "Entrée gratuite" : $"Tarif : {tarif} €");
Les seuils vont du plus restrictif au plus général, et la question « étudiant » n’est posée que lorsqu’elle peut changer le résultat. L’épisode suivant montre comment exprimer ce type de grille avec une expression switch.
Erreurs fréquentes
- écrire les seuils dans le mauvais ordre ;
- confondre
=(affectation) et==(comparaison) ; - utiliser
&ou|alors que le court-circuit de&&ou||est attendu ; - imbriquer trop de conditions au lieu d’extraire une méthode ou d’utiliser un
switch.
Épisode précédent : saisie et TryParse. Épisode suivant : maîtriser switch et le pattern matching.
La série C# pour débutants
Cette série suit une progression : chaque épisode réutilise les notions des précédents.
- Variables et types
- Saisie utilisateur et TryParse
- Conditions if, else et ternaire (vous êtes ici)
- Switch et pattern matching
- Boucles for, while et foreach
- Tableaux, listes, dictionnaires et LINQ
- Méthodes, paramètres et surcharges
Une fois ces bases acquises, le parcours C# et ASP.NET Core prolonge la série vers les API web, la validation et l’asynchrone.