Einleitung: Warum machen C#-Anfänger immer wieder die gleichen Fehler?
C# ist eine mächtige und elegante Sprache, aber ihre Flexibilität wird oft zur Falle für Anfänger. Viele kommen von anderen Sprachen (Python, JavaScript) und versuchen, vertraute Muster anzuwenden, die in .NET anders funktionieren. In diesem Artikel analysieren wir 5 häufige Fehler, die C#-Anfänger machen. Sie lernen nicht nur "wie man es nicht macht", sondern erhalten auch konkrete Beispiele für korrekten Code. Los geht's!
1. Verwechslung von ref, out und Übergabe als Wert
Einer der häufigsten Fehler ist das Missverständnis, wie C# Parameter übergibt. Standardmäßig werden alle Werttypen (int, bool, struct) als Wert übergeben. Referenztypen (Klassen) werden als Referenz übergeben, aber die Referenz selbst wird als Wert übergeben.
Fehler: Versuch, einen Werttyp ohne ref über einen Parameter zu ändern
public void BadIncrement(int number){ number++; // Dies ändert die ursprüngliche Variable NICHT!}
int x = 5;BadIncrement(x);Console.WriteLine(x); // Gibt 5 aus, nicht 6Richtige Vorgehensweise: Verwenden Sie ref für Werttypen
public void GoodIncrement(ref int number){ number++; // Jetzt betrifft die Änderung das Original}
int y = 5;GoodIncrement(ref y);Console.WriteLine(y); // Gibt 6 ausTipp: Verwenden Sie out, wenn eine Methode mehrere Werte zurückgeben muss. Aber denken Sie daran: out erfordert eine zwingende Initialisierung innerhalb der Methode.
2. Ignorieren der Unveränderlichkeit von Strings
Viele Anfänger denken, dass string ein einfaches Zeichen-Array ist. In Wirklichkeit sind Strings in C# unveränderlich. Jede Verkettungsoperation erzeugt ein neues Objekt im Speicher.
Fehler: Verkettung in einer Schleife
string result = "";for (int i = 0; i < 1000; i++){ result += i.ToString(); // Jede Iteration erzeugt einen neuen String! (O(n²))}Richtige Vorgehensweise: Verwenden Sie StringBuilder
var sb = new System.Text.StringBuilder();for (int i = 0; i < 1000; i++){ sb.Append(i); // Funktioniert schnell, O(n)}string result = sb.ToString();Wichtig: Für einfache Verkettungen von 2-3 Strings verwenden Sie $"string {variable}" (Interpolation). Für Schleifen verwenden Sie immer StringBuilder.
3. Falsche Null-Behandlung und NullReferenceException
Anfänger-Entwickler vergessen oft, Objekte auf null zu prüfen, was zum Absturz der Anwendung mit einer NullReferenceException führt. Dies ist der häufigste Fehler in C#.
Fehler: Aufruf einer Methode ohne Prüfung
string name = GetName(); // könnte null zurückgebenint length = name.Length; // Wenn name == null - stürzt das Programm ab!Richtige Vorgehensweise: Verwenden Sie den Null-Conditional-Operator (?.) und den Null-Coalescing-Operator (??)
string name = GetName();int length = name?.Length ?? 0; // Wenn name null ist, ist length 0
// Oder eine klassische Prüfungif (name != null){ Console.WriteLine(name.Length);}Tipp für .NET 6+: Aktivieren Sie nullable reference types in Ihrem Projekt. Der Compiler warnt Sie vor potenziellen Null-Gefahren.
4. Verschlucken von Ausnahmen (leeres catch)
Anfänger schreiben oft catch (Exception) { } — einen leeren Catch-Block. Das macht den Code zu einem "stillen Killer": Das Programm läuft weiter, aber mit falschen Daten.
Fehler: Leeres catch
try{ int.Parse(userInput);}catch (Exception){ // Den Fehler ignorieren - schlechte Praxis!}Richtige Vorgehensweise: Fangen Sie spezifische Ausnahmen ab oder protokollieren Sie sie
try{ int result = int.Parse(userInput);}catch (FormatException ex){ Console.WriteLine($"Format er