Menu
Coddy logo textTech

C# Cheat Sheet

Ultimo aggiornamento

Hello World e struttura del programma

Le istruzioni di primo livello (da .NET 6) ti evitano la classe di boilerplate.

ElementoCodice
Programma con istruzioni di primo livelloConsole.WriteLine("Hello, World!");
Importare un namespaceusing System;
Punto di ingresso classicostatic void Main(string[] args) { ... }
Stampare una rigaConsole.WriteLine("text");
Leggere una rigastring s = Console.ReadLine();
Interpolazione di stringheConsole.WriteLine($"Hi {name}");
Commenti// line e /* block */

Tipi di dati

TipoDescrizione
intIntero con segno a 32 bit
longIntero con segno a 64 bit
double / floatNumeri in virgola mobile
decimalDecimale ad alta precisione (importi)
booltrue o false
charSingolo carattere Unicode
stringTesto immutabile
varIl compilatore deduce il tipo
int?Tipo valore nullable

Variabili

OperazioneSintassi
Dichiarare e inizializzareint x = 5;
Inferenza del tipovar name = "Ada";
Costanteconst double Pi = 3.14159;
Campo di sola letturareadonly int id;
Riferimento nullablestring? maybe = null;
Null-coalescingvar y = maybe ?? "default";
Null-conditionalint? len = text?.Length;

Controllo del flusso

IstruzioneSintassi
If / elseif (x > 0) { ... } else { ... }
Istruzione switchswitch (n) { case 1: ...; break; default: ...; }
Espressione switchvar s = n switch { 1 => "one", _ => "other" };
Ciclo whilewhile (i < n) { ... }
Ciclo do-whiledo { ... } while (i < n);
Ciclo forfor (int i = 0; i < n; i++) { ... }
Ciclo foreachforeach (var item in list) { ... }
Break / continuebreak; esce da un ciclo, continue; passa all'iterazione successiva

Metodi

OperazioneSintassi
Definire un metodoint Add(int a, int b) { return a + b; }
Corpo a espressioneint Add(int a, int b) => a + b;
Nessun valore di ritornovoid Greet() { ... }
Parametro opzionaleint Pow(int b, int e = 2) { ... }
Argomenti con nomePow(b: 2, e: 3);
Parametro outbool TryParse(string s, out int n) { ... }
Metodo staticostatic int Square(int x) => x * x;
Espressione lambdaFunc<int, int> f = x => x * 2;

Classi e OOP

OperazioneSintassi
Definire una classeclass Dog { ... }
Proprietà automaticapublic string Name { get; set; }
Proprietà di sola letturapublic int Id { get; }
Constructorpublic Dog(string name) { Name = name; }
Creare un oggettovar d = new Dog("Rex");
Ereditarietàclass Puppy : Dog { ... }
Interfacciainterface IRunnable { void Run(); }
Sovrascrivere un metodopublic override void Speak() { ... }
Record (immutabile)record Point(int X, int Y);

Collezioni

Collezioni generiche di System.Collections.Generic.

TipoUso ed esempio
List<T>Array dinamico: list.Add(1); list.Count;
Dictionary<K, V>Chiave-valore: dict["a"] = 1; dict.ContainsKey("a");
HashSet<T>Valori unici: set.Add(5); set.Contains(5);
Queue<T>FIFO: q.Enqueue(x); q.Dequeue();
Stack<T>LIFO: s.Push(x); s.Pop();
Arrayint[] nums = { 1, 2, 3 };
Inizializzatore di collezionevar l = new List<int> { 1, 2, 3 };
Iterare un dizionarioforeach (var kv in dict) { kv.Key; kv.Value; }

LINQ

Interroga le collezioni in modo fluente; da System.Linq.

OperazioneSintassi
Filtrarenums.Where(n => n > 0)
Proiettare / mapparenums.Select(n => n * 2)
Ordinarenums.OrderBy(n => n) / OrderByDescending(...)
Prima corrispondenzanums.First(n => n > 5) / FirstOrDefault(...)
Any / allnums.Any(n => n < 0) / nums.All(n => n > 0)
Contare le corrispondenzenums.Count(n => n > 0)
Aggregarenums.Sum(), nums.Max(), nums.Average()
Raggruppareitems.GroupBy(i => i.Category)
Materializzare.ToList() / .ToArray()

Schemi comuni (proprietà, async)

SchemaSintassi
Metodo asyncasync Task<int> GetAsync() { ... }
Attendere un taskvar result = await GetAsync();
Try / catchtry { ... } catch (Exception e) { ... }
Finallyfinally { ... } viene sempre eseguito
Using (dispose)using var file = File.OpenRead(path);
Formattazione delle stringhe$"Total: {amount:C}"
Classe genericaclass Box<T> { public T Value; }
Pattern matchingif (obj is Dog d) { d.Bark(); }

La sintassi, le collezioni e le query LINQ di C# che usi di più, in una sola pagina. Questa cheat sheet di C# è un riferimento rapido per scrivere in C#: tipi di dati, controllo del flusso, classi, le collezioni List/Dictionary, LINQ e gli schemi con proprietà e async che caratterizzano il codice .NET idiomatico.

Tutto quello che trovi qui è C# standard su .NET e gira con la CLI dotnet. Copia quello che ti serve oppure prova qualsiasi frammento dal vivo nel playground C#, senza installare nessun SDK.

Domande frequenti sulla cheat sheet di C#

Questa cheat sheet di C# è gratuita?
Sì. Questa cheat sheet di C# è completamente gratuita e non richiede registrazione. Salvala nei preferiti e torna quando devi controllare la sintassi, una collezione o un metodo LINQ.
Qual è la differenza tra tipi valore e tipi riferimento in C#?
I tipi valore (int, double, bool, struct, enum) contengono direttamente i dati e vengono copiati quando li assegni o li passi a un metodo: modificare la copia non tocca l'originale. I tipi riferimento (class, string, array, List<T>) contengono un riferimento a dati sull'heap, quindi due variabili possono puntare allo stesso oggetto e una modifica fatta tramite una è visibile anche dall'altra. string è un tipo riferimento ma si comporta come immutabile.
Cos'è LINQ e quando conviene usarlo?
LINQ (Language Integrated Query) è un insieme di metodi come Where, Select e OrderBy che ti permettono di filtrare, trasformare e aggregare collezioni con chiamate leggibili e concatenabili invece di cicli scritti a mano. Usalo ogni volta che altrimenti scriveresti un ciclo per costruire una lista filtrata o proiettata: è conciso e viene valutato in modo lazy finché non chiami ToList() o non iteri.
Posso esercitarmi con C# online?
Sì. Apri il playground C# per eseguire nel browser qualsiasi frammento di questa cheat sheet, senza installare nessun SDK. Quando vuoi un percorso strutturato, il corso interattivo gratuito di C# di Coddy ti porta passo dopo passo da variabili e cicli fino a classi, collezioni e LINQ.
Questa cheat sheet va bene per chi inizia?
Sì. È organizzata dai mattoni più comuni (tipi, controllo del flusso, metodi) fino a quelli avanzati (LINQ, async, generics), così puoi usare le prime sezioni fin dal primo giorno e arrivare al resto con il tempo.
Illustrazione dei linguaggi di programmazione di Coddy

Impara C# con Coddy

INIZIA