Menu
Coddy logo textTech

C# Spickzettel

Zuletzt aktualisiert

Hello World & Programmaufbau

Top-Level-Anweisungen (seit .NET 6) ersparen dir die Boilerplate-Klasse.

ElementCode
Top-Level-ProgrammConsole.WriteLine("Hello, World!");
Einen Namensraum importierenusing System;
Klassischer Einstiegspunktstatic void Main(string[] args) { ... }
Eine Zeile ausgebenConsole.WriteLine("text");
Eine Zeile lesenstring s = Console.ReadLine();
String-InterpolationConsole.WriteLine($"Hi {name}");
Kommentare// line und /* block */

Datentypen

TypBeschreibung
int32-Bit-Ganzzahl mit Vorzeichen
long64-Bit-Ganzzahl mit Vorzeichen
double / floatGleitkommazahlen
decimalDezimalzahl mit hoher Genauigkeit (Geldbeträge)
booltrue oder false
charEinzelnes Unicode-Zeichen
stringUnveränderlicher Text
varDer Compiler leitet den Typ ab
int?Nullbarer Werttyp

Variablen

OperationSyntax
Deklarieren & initialisierenint x = 5;
Typinferenzvar name = "Ada";
Konstanteconst double Pi = 3.14159;
Schreibgeschütztes Feldreadonly int id;
Nullbare Referenzstring? maybe = null;
Null-Coalescingvar y = maybe ?? "default";
Null-bedingtint? len = text?.Length;

Kontrollfluss

AnweisungSyntax
If / elseif (x > 0) { ... } else { ... }
Switch-Anweisungswitch (n) { case 1: ...; break; default: ...; }
Switch-Ausdruckvar s = n switch { 1 => "one", _ => "other" };
While-Schleifewhile (i < n) { ... }
Do-while-Schleifedo { ... } while (i < n);
For-Schleifefor (int i = 0; i < n; i++) { ... }
Foreach-Schleifeforeach (var item in list) { ... }
Break / continuebreak; verlässt eine Schleife, continue; springt zur nächsten Iteration

Methoden

OperationSyntax
Eine Methode definierenint Add(int a, int b) { return a + b; }
Ausdruckskörperint Add(int a, int b) => a + b;
Kein Rückgabewertvoid Greet() { ... }
Optionaler Parameterint Pow(int b, int e = 2) { ... }
Benannte ArgumentePow(b: 2, e: 3);
Out-Parameterbool TryParse(string s, out int n) { ... }
Statische Methodestatic int Square(int x) => x * x;
Lambda-AusdruckFunc<int, int> f = x => x * 2;

Klassen & OOP

OperationSyntax
Eine Klasse definierenclass Dog { ... }
Auto-Propertypublic string Name { get; set; }
Schreibgeschützte Propertypublic int Id { get; }
Konstruktorpublic Dog(string name) { Name = name; }
Ein Objekt erstellenvar d = new Dog("Rex");
Vererbungclass Puppy : Dog { ... }
Interfaceinterface IRunnable { void Run(); }
Eine Methode überschreibenpublic override void Speak() { ... }
Record (unveränderlich)record Point(int X, int Y);

Collections

Generische Collections aus System.Collections.Generic.

TypVerwendung & 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();
Arrayint[] nums = { 1, 2, 3 };
Collection-Initialisierervar l = new List<int> { 1, 2, 3 };
Ein Dictionary durchlaufenforeach (var kv in dict) { kv.Key; kv.Value; }

LINQ

Collections flüssig abfragen; aus System.Linq.

OperationSyntax
Filternnums.Where(n => n > 0)
Projizieren / mappennums.Select(n => n * 2)
Sortierennums.OrderBy(n => n) / OrderByDescending(...)
Erster Treffernums.First(n => n > 5) / FirstOrDefault(...)
Any / allnums.Any(n => n < 0) / nums.All(n => n > 0)
Treffer zählennums.Count(n => n > 0)
Aggregierennums.Sum(), nums.Max(), nums.Average()
Gruppieren nachitems.GroupBy(i => i.Category)
Materialisieren.ToList() / .ToArray()

Häufige Muster (Properties, async)

MusterSyntax
Async-Methodeasync Task<int> GetAsync() { ... }
Auf einen Task wartenvar result = await GetAsync();
Try / catchtry { ... } catch (Exception e) { ... }
Finallyfinally { ... } läuft immer
Using (dispose)using var file = File.OpenRead(path);
String-Formatierung$"Total: {amount:C}"
Generische Klasseclass Box<T> { public T Value; }
Pattern Matchingif (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.

C#-Spickzettel FAQ

Ist dieser C#-Spickzettel kostenlos?
Ja. Dieser C#-Spickzettel ist völlig kostenlos, ohne erforderliche Anmeldung. Setze ein Lesezeichen und komm jederzeit wieder, wenn du Syntax, eine Collection oder eine LINQ-Methode nachschlagen möchtest.
Was ist der Unterschied zwischen Werttypen und Referenztypen in C#?
Werttypen (int, double, bool, struct, enum) halten ihre Daten direkt und werden bei der Zuweisung oder Übergabe an eine Methode kopiert - eine Änderung der Kopie wirkt sich nicht auf das Original aus. Referenztypen (class, string, Arrays, List<T>) halten eine Referenz auf Daten im Heap, sodass zwei Variablen auf dasselbe Objekt zeigen können und eine Änderung über die eine über die andere sichtbar ist. string ist ein Referenztyp, verhält sich aber unveränderlich.
Was ist LINQ und wann sollte ich es verwenden?
LINQ (Language Integrated Query) ist eine Reihe von Methoden wie Where, Select und OrderBy, mit denen du Collections mit gut lesbaren, verkettbaren Aufrufen filtern, transformieren und aggregieren kannst, statt mit manuellen Schleifen. Verwende es immer dann, wenn du sonst eine Schleife schreiben würdest, um eine gefilterte oder projizierte Liste aufzubauen - es ist kompakt und wird bis zum Aufruf von ToList() oder zur Iteration verzögert ausgewertet.
Kann ich C# online üben?
Ja. Öffne den C#-Playground, um jeden Codeschnipsel aus diesem Spickzettel in deinem Browser auszuführen - kein SDK zu installieren. Wenn du Struktur möchtest, führt dich Coddys kostenloser interaktiver C#-Kurs Schritt für Schritt von Variablen und Schleifen zu Klassen, Collections und LINQ.
Ist dieser Spickzettel für Anfänger geeignet?
Ja. Er ist von den häufigsten Bausteinen (Typen, Kontrollfluss, Methoden) hin zu den fortgeschrittenen (LINQ, async, Generics) gegliedert, sodass du die oberen Abschnitte schon am ersten Tag nutzen und in den Rest hineinwachsen kannst.
Coddy programming languages illustration

Lerne C# mit Coddy

LOS GEHT'S