Aide-mémoire C#
Dernière mise à jour
Hello World et structure d'un programme
Les instructions de premier niveau (depuis .NET 6) vous permettent de sauter la classe standard.
| Élément | Code |
|---|---|
| Programme de premier niveau | Console.WriteLine("Hello, World!"); |
| Importer un espace de noms | using System; |
| Point d'entrée classique | static void Main(string[] args) { ... } |
| Afficher une ligne | Console.WriteLine("text"); |
| Lire une ligne | string s = Console.ReadLine(); |
| Interpolation de chaîne | Console.WriteLine($"Hi {name}"); |
| Commentaires | // line et /* block */ |
Types de données
| Type | Description |
|---|---|
int | Entier signé 32 bits |
long | Entier signé 64 bits |
double / float | Nombres à virgule flottante |
decimal | Décimal haute précision (monnaie) |
bool | true ou false |
char | Caractère Unicode unique |
string | Texte immuable |
var | Le compilateur infère le type |
int? | Type valeur nullable |
Variables
| Opération | Syntaxe |
|---|---|
| Déclarer et initialiser | int x = 5; |
| Inférence de type | var name = "Ada"; |
| Constante | const double Pi = 3.14159; |
| Champ en lecture seule | readonly int id; |
| Référence nullable | string? maybe = null; |
| Coalescence des nuls | var y = maybe ?? "default"; |
| Accès conditionnel nul | int? len = text?.Length; |
Contrôle de flux
| Instruction | Syntaxe |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Instruction switch | switch (n) { case 1: ...; break; default: ...; } |
| Expression switch | var s = n switch { 1 => "one", _ => "other" }; |
| Boucle while | while (i < n) { ... } |
| Boucle do-while | do { ... } while (i < n); |
| Boucle for | for (int i = 0; i < n; i++) { ... } |
| Boucle foreach | foreach (var item in list) { ... } |
| Break / continue | break; sort d'une boucle, continue; passe à l'itération suivante |
Méthodes
| Opération | Syntaxe |
|---|---|
| Définir une méthode | int Add(int a, int b) { return a + b; } |
| Corps d'expression | int Add(int a, int b) => a + b; |
| Sans valeur de retour | void Greet() { ... } |
| Paramètre optionnel | int Pow(int b, int e = 2) { ... } |
| Arguments nommés | Pow(b: 2, e: 3); |
| Paramètre out | bool TryParse(string s, out int n) { ... } |
| Méthode statique | static int Square(int x) => x * x; |
| Expression lambda | Func<int, int> f = x => x * 2; |
Classes et POO
| Opération | Syntaxe |
|---|---|
| Définir une classe | class Dog { ... } |
| Propriété automatique | public string Name { get; set; } |
| Propriété en lecture seule | public int Id { get; } |
| Constructeur | public Dog(string name) { Name = name; } |
| Créer un objet | var d = new Dog("Rex"); |
| Héritage | class Puppy : Dog { ... } |
| Interface | interface IRunnable { void Run(); } |
| Redéfinir une méthode | public override void Speak() { ... } |
| Record (immuable) | record Point(int X, int Y); |
Collections
Collections génériques de System.Collections.Generic.
| Type | Usage et exemple |
|---|---|
List<T> | Tableau dynamique : list.Add(1); list.Count; |
Dictionary<K, V> | Clé-valeur : dict["a"] = 1; dict.ContainsKey("a"); |
HashSet<T> | Valeurs uniques : set.Add(5); set.Contains(5); |
Queue<T> | FIFO : q.Enqueue(x); q.Dequeue(); |
Stack<T> | LIFO : s.Push(x); s.Pop(); |
| Tableau | int[] nums = { 1, 2, 3 }; |
| Initialiseur de collection | var l = new List<int> { 1, 2, 3 }; |
| Parcourir un dictionnaire | foreach (var kv in dict) { kv.Key; kv.Value; } |
LINQ
Interroger les collections de façon fluide ; de System.Linq.
| Opération | Syntaxe |
|---|---|
| Filtrer | nums.Where(n => n > 0) |
| Projeter / mapper | nums.Select(n => n * 2) |
| Trier | nums.OrderBy(n => n) / OrderByDescending(...) |
| Première correspondance | nums.First(n => n > 5) / FirstOrDefault(...) |
| Any / all | nums.Any(n => n < 0) / nums.All(n => n > 0) |
| Compter les correspondances | nums.Count(n => n > 0) |
| Agréger | nums.Sum(), nums.Max(), nums.Average() |
| Regrouper par | items.GroupBy(i => i.Category) |
| Matérialiser | .ToList() / .ToArray() |
Schémas courants (propriétés, async)
| Schéma | Syntaxe |
|---|---|
| Méthode async | async Task<int> GetAsync() { ... } |
| Attendre une tâche | var result = await GetAsync(); |
| Try / catch | try { ... } catch (Exception e) { ... } |
| Finally | finally { ... } s'exécute toujours |
| Using (libération) | using var file = File.OpenRead(path); |
| Formatage de chaîne | $"Total: {amount:C}" |
| Classe générique | class Box<T> { public T Value; } |
| Filtrage par motif | if (obj is Dog d) { d.Bark(); } |
La syntaxe C#, les collections et les requêtes LINQ que vous utilisez le plus, sur une seule page. Cet aide-mémoire C# est une référence rapide pour écrire du C# - les types de données, le contrôle de flux, les classes, les collections List/Dictionary, LINQ, ainsi que les schémas de propriétés et d'async qui définissent un code .NET idiomatique.
Tout ce qui figure ici est du C# standard sur .NET et s'exécute avec la CLI dotnet. Copiez ce dont vous avez besoin, ou essayez n'importe quel extrait en direct dans le playground C# - aucun SDK à installer.
FAQ de l'aide-mémoire C#
Cet aide-mémoire C# est-il gratuit ?
Quelle est la différence entre les types valeur et les types référence en C# ?
int, double, bool, struct, enum) contiennent directement leurs données et sont copiés lors de l'affectation ou du passage à une méthode - modifier la copie n'affecte pas l'original. Les types référence (class, string, tableaux, List<T>) contiennent une référence vers des données sur le tas, donc deux variables peuvent pointer vers le même objet et une modification via l'une est visible via l'autre. string est un type référence mais se comporte de façon immuable.Qu'est-ce que LINQ et quand l'utiliser ?
Where, Select et OrderBy qui vous permettent de filtrer, transformer et agréger des collections avec des appels lisibles et chaînables au lieu de boucles manuelles. Utilisez-le chaque fois que vous écririez sinon une boucle pour construire une liste filtrée ou projetée - c'est concis et évalué de manière paresseuse jusqu'à ce que vous appeliez ToList() ou que vous itériez.