Hello World & Programmaufbau
Top-Level-Anweisungen (seit .NET 6) ersparen dir die Boilerplate-Klasse.
| Element | Code |
|---|
| Top-Level-Programm | Console.WriteLine("Hello, World!"); |
| Einen Namensraum importieren | using System; |
| Klassischer Einstiegspunkt | static void Main(string[] args) { ... } |
| Eine Zeile ausgeben | Console.WriteLine("text"); |
| Eine Zeile lesen | string s = Console.ReadLine(); |
| String-Interpolation | Console.WriteLine($"Hi {name}"); |
| Kommentare | // line und /* block */ |
Datentypen
| Typ | Beschreibung |
|---|
int | 32-Bit-Ganzzahl mit Vorzeichen |
long | 64-Bit-Ganzzahl mit Vorzeichen |
double / float | Gleitkommazahlen |
decimal | Dezimalzahl mit hoher Genauigkeit (Geldbeträge) |
bool | true oder false |
char | Einzelnes Unicode-Zeichen |
string | Unveränderlicher Text |
var | Der Compiler leitet den Typ ab |
int? | Nullbarer Werttyp |
Variablen
| Operation | Syntax |
|---|
| Deklarieren & initialisieren | int x = 5; |
| Typinferenz | var name = "Ada"; |
| Konstante | const double Pi = 3.14159; |
| Schreibgeschütztes Feld | readonly int id; |
| Nullbare Referenz | string? maybe = null; |
| Null-Coalescing | var y = maybe ?? "default"; |
| Null-bedingt | int? len = text?.Length; |
Kontrollfluss
| Anweisung | Syntax |
|---|
| If / else | if (x > 0) { ... } else { ... } |
| Switch-Anweisung | switch (n) { case 1: ...; break; default: ...; } |
| Switch-Ausdruck | var s = n switch { 1 => "one", _ => "other" }; |
| While-Schleife | while (i < n) { ... } |
| Do-while-Schleife | do { ... } while (i < n); |
| For-Schleife | for (int i = 0; i < n; i++) { ... } |
| Foreach-Schleife | foreach (var item in list) { ... } |
| Break / continue | break; verlässt eine Schleife, continue; springt zur nächsten Iteration |
Methoden
| Operation | Syntax |
|---|
| Eine Methode definieren | int Add(int a, int b) { return a + b; } |
| Ausdruckskörper | int Add(int a, int b) => a + b; |
| Kein Rückgabewert | void Greet() { ... } |
| Optionaler Parameter | int Pow(int b, int e = 2) { ... } |
| Benannte Argumente | Pow(b: 2, e: 3); |
| Out-Parameter | bool TryParse(string s, out int n) { ... } |
| Statische Methode | static int Square(int x) => x * x; |
| Lambda-Ausdruck | Func<int, int> f = x => x * 2; |
Klassen & OOP
| Operation | Syntax |
|---|
| Eine Klasse definieren | class Dog { ... } |
| Auto-Property | public string Name { get; set; } |
| Schreibgeschützte Property | public int Id { get; } |
| Konstruktor | public Dog(string name) { Name = name; } |
| Ein Objekt erstellen | var d = new Dog("Rex"); |
| Vererbung | class Puppy : Dog { ... } |
| Interface | interface IRunnable { void Run(); } |
| Eine Methode überschreiben | public override void Speak() { ... } |
| Record (unveränderlich) | record Point(int X, int Y); |
Collections
Generische Collections aus System.Collections.Generic.
| Typ | Verwendung & Beispiel |
|---|
List<T> | Dynamisches Array: list.Add(1); list.Count; |
Dictionary<K, V> | Schlüssel-Wert: dict["a"] = 1; dict.ContainsKey("a"); |
HashSet<T> | Eindeutige Werte: set.Add(5); set.Contains(5); |
Queue<T> | FIFO: q.Enqueue(x); q.Dequeue(); |
Stack<T> | LIFO: s.Push(x); s.Pop(); |
| Array | int[] nums = { 1, 2, 3 }; |
| Collection-Initialisierer | var l = new List<int> { 1, 2, 3 }; |
| Ein Dictionary durchlaufen | foreach (var kv in dict) { kv.Key; kv.Value; } |
LINQ
Collections flüssig abfragen; aus System.Linq.
| Operation | Syntax |
|---|
| Filtern | nums.Where(n => n > 0) |
| Projizieren / mappen | nums.Select(n => n * 2) |
| Sortieren | nums.OrderBy(n => n) / OrderByDescending(...) |
| Erster Treffer | nums.First(n => n > 5) / FirstOrDefault(...) |
| Any / all | nums.Any(n => n < 0) / nums.All(n => n > 0) |
| Treffer zählen | nums.Count(n => n > 0) |
| Aggregieren | nums.Sum(), nums.Max(), nums.Average() |
| Gruppieren nach | items.GroupBy(i => i.Category) |
| Materialisieren | .ToList() / .ToArray() |
Häufige Muster (Properties, async)
| Muster | Syntax |
|---|
| Async-Methode | async Task<int> GetAsync() { ... } |
| Auf einen Task warten | var result = await GetAsync(); |
| Try / catch | try { ... } catch (Exception e) { ... } |
| Finally | finally { ... } läuft immer |
| Using (dispose) | using var file = File.OpenRead(path); |
| String-Formatierung | $"Total: {amount:C}" |
| Generische Klasse | class Box<T> { public T Value; } |
| Pattern Matching | if (obj is Dog d) { d.Bark(); } |
Die C#-Syntax, Collections und LINQ-Abfragen, die du am häufigsten brauchst, auf einer Seite. Dieser C#-Spickzettel ist eine Schnellreferenz zum Schreiben von C# - die Datentypen, der Kontrollfluss, Klassen, die List/Dictionary-Collections, LINQ sowie die Property- und Async-Muster, die idiomatischen .NET-Code ausmachen.
Alles hier ist Standard-C# auf .NET und läuft mit der dotnet-CLI. Kopiere, was du brauchst, oder probiere jeden Codeschnipsel live im C#-Playground aus - kein SDK zu installieren.