4.8 KiB
4.8 KiB
Petite liste d’exemples de styles modernes en C# (C# 8 → C# 12)
🔹 1. Opérateur ternaire (version concise) (if/else)
var statut = age >= 18 ? "Majeur" : "Mineur";
🔹 2. switch expression (moderne)
// Le _ remplace default.
// Exemple simple
var codeErreur = 500;
string message = codeErreur switch
{
404 => "Introuvable",
401 => "Non autorisé",
500 => "Erreur serveur",
_ => "Erreur inconnue"
};
// Avec enum
enum Statut { Actif, Inactif, Suspendu }
Statut statut = Statut.Actif;
string message = statut switch
{
Statut.Actif => "Utilisateur actif",
Statut.Inactif => "Utilisateur inactif",
Statut.Suspendu => "Compte suspendu",
_ => "Statut inconnu"
};
// Avec conditions (patterns relationnels)
int age = 20;
string categorie = age switch
{
< 12 => "Enfant",
>= 12 and < 18 => "Adolescent",
>= 18 => "Adulte"
};
// Avec expression conditionnelle imbriquée :
var note = score switch
{
>= 16 => "Très bien",
>= 12 => "Bien",
>= 10 => "Passable",
_ => "Insuffisant"
};
// Avec when (pattern guard)
int note = 15;
string resultat = note switch
{
int n when n >= 16 => "Très bien",
int n when n >= 12 => "Bien",
int n when n >= 10 => "Passable",
_ => "Échec"
};
// Switch sur string
string pays = "FR";
string langue = pays switch
{
"FR" => "Français",
"EN" => "Anglais",
"ES" => "Espagnol",
_ => "Inconnue"
};
// Switch avec tuple
int x = 0, y = 5;
string position = (x, y) switch
{
(0, 0) => "Origine",
(0, _) => "Axe Y",
(_, 0) => "Axe X",
_ => "Plan"
};
// Switch avec type pattern
object obj = "Bonjour";
string description = obj switch
{
int i => $"Entier : {i}",
string s => $"Chaîne : {s}",
null => "Null",
_ => "Autre type"
};
// etc
// ...
🔹 3. Parcourir un tableau / liste
foreach (simple et propre)
foreach (var item in items)
{
Console.WriteLine(item);
}
LINQ (fonctionnel)
items
.Where(i => i.IsActive)
.Select(i => i.Name)
.ToList()
.ForEach(Console.WriteLine);
🔹 4. Création d’objet (init rapide)
Initialiseur d’objet
var user = new User
{
Id = 1,
Name = "Alice",
IsAdmin = true
};
Constructeur concis (target-typed new)
User user = new(1, "Alice", true);
🔹 5. record (objets immuables – très moderne)
public record User(int Id, string Name, bool IsAdmin);
Utilisation :
// User(int id, string name, bool isAdmin)
var user = new User(1, "Alice", false);
// Retourn false.
var admin = user with { IsAdmin = true };
🔹 6. Null safety (très utilisé)
Opérateur ?.
// Si user == null alors on n'accède pas à Name
// Si Name == null alors on n'accède pas à Length
var length = user?.Name?.Length;
Coalescence ??
// Si user.Name == null alors on assigne "Inconnu"
string name = user.Name ?? "Inconnu";
Affectation conditionnelle ??=
// Si null alors on assigne.
user.Name ??= "Par défaut";
🔹 7. Expressions lambda
Func<int, int> carre = x => x * x;
Console.WriteLine(carre(5));
🔹 8. Pattern matching
if (obj is User { IsAdmin: true })
{
Console.WriteLine("Admin détecté");
}
🔹 9. Tableaux et collections modernes
Création simplifiée (C# 9+)
int[] nombres = { 1, 2, 3, 4 };
Range & Index
int[] nombres = { 1, 2, 3, 4, 5 };
// INDEX (^) – à partir de la fin
var ... = nombres[^1]; // dernier élément → 5
var ... = nombres[^2]; // avant-dernier → 4
var ... = nombres[^3]; // retourne 3
// RANGE (..) – sous-tableaux
var ... = nombres[1..4]; // {2, 3, 4}
// Un seul élément via Range
var ... = nombres[2..3]; // {3}
// Début → Fin du tableau
var ... = nombres[2..]; // {3, 4, 5}
// Début du tableau → Fin
var ... = nombres[..3]; // {1, 2, 3}
// Début → Fin (exclus)
var sousTableau = nombres[1..4]; // {2, 3, 4}
// Tout le tableau
var ... = nombres[..]; // {1, 2, 3, 4, 5}
// Range avec Index depuis la fin
var ... = nombres[1..^1]; // {2, 3, 4}
// Derniers éléments
var ... = nombres[^2..]; // {4, 5}
// Tout sauf les deux derniers
var ... = nombres[..^2]; // {1, 2, 3}
🔹 10. Méthodes d’expression (très clean)
int Add(int a, int b) => a + b;
🔹 11. using moderne (sans bloc)
using var file = new StreamWriter("test.txt");
file.WriteLine("Hello");
🔹 12. Collections immuables rapides
// Création d'un tableau de string
var fruits = new[] { "Pomme", "Banane", "Orange" };