Code-Review in C#: Was prüfen und wie man Feedback an Anfänger gibt

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Code-Review in C#: Was prüfen und wie man Feedback gibt

\n

Code-Review ist eines der mächtigsten Werkzeuge zur Verbesserung der Codequalität. Für Anfänger in der C#-Entwicklung wirkt es oft stressig: Man hat Angst, dass der eigene Code kritisiert wird, oder man weiß nicht genau, worauf man im Code anderer achten soll. Tatsächlich ist ein gutes Code-Review ein Dialog, keine Prüfung. In diesem Artikel schauen wir uns an, worauf Sie bei der Überprüfung von C#-Code (insbesondere im .NET-Ökosystem) achten sollten und wie Sie Anmerkungen so formulieren, dass sie helfen, ohne zu verletzen.

\n\n

1. Was im C#-Code prüfen: Eine Checkliste für den Reviewer

\n

Wenn Sie einen Pull Request (PR) eines Kollegen öffnen, schweift der Blick umher. Um nicht in Details zu ertrinken, verwenden Sie einen systematischen Ansatz. Hier sind die wichtigsten Bereiche, die Sie in jedem C#-Projekt prüfen sollten.

\n\n

1.1. Architektur und Lesbarkeit

\n

Bewerten Sie zuerst das Gesamtbild. Beantworten Sie die Fragen:

\n
    \n
  • Löst dieser Code die gestellte Aufgabe?
  • \n
  • Dupliziert er vorhandene Logik (DRY-Prinzip)?
  • \n
  • Sind die Namen von Klassen, Methoden und Variablen verständlich?
  • \n
\n

Schlecht:

\n
public void DoStuff(int a, int b)\n{\n    var x = a + b;\n    // ... weitere 50 Zeilen\n}
\n

Gut:

\n
public int CalculateTotalPrice(int basePrice, int taxAmount)\n{\n    return basePrice + taxAmount;\n}
\n

Der Name der Methode und der Parameter verraten sofort den Zweck. Das reduziert die kognitive Belastung des Lesers.

\n\n

1.2. Fehlerbehandlung und Null-Sicherheit

\n

C# ist eine Sprache mit einem ausgefeilten Typsystem, aber NullReferenceException ist ein häufiges Problem. Prüfen Sie:

\n
    \n
  • Werden null-Prüfungen verwendet (?. , ??, ??=)?
  • \n
  • Gibt es eine Ausnahmebehandlung (try-catch), wo nötig?
  • \n
  • Werden Ausnahmen in einem leeren catch verschluckt?
  • \n
\n

Beispiel für gefährlichen Code:

\n
var user = GetUserById(id);\nConsole.WriteLine(user.Name); // Fehler, wenn user == null
\n

Sichere Variante:

\n
var user = GetUserById(id);\nConsole.WriteLine(user?.Name ?? "Gast");
\n\n

1.3. Leistung und LINQ

\n

LINQ ist praktisch, kann aber ineffizient sein. Prüfen Sie:

\n
    \n
  • Wird ein mehrfacher Durchlauf durch die Sammlung gemacht (z. B. .Where().Select().ToList() auf IQueryable)?
  • \n
  • Wird Any() anstelle von Count() > 0 verwendet, um das Vorhandensein von Elementen zu prüfen?
  • \n
  • Gibt es unnötige Materialisierungen (.ToList(), .ToArray()) in der Mitte einer Kette?
  • \n
\n

Schlecht:

\n
var list = items.Where(x => x.IsActive).ToList();\nvar first = list.FirstOrDefault();
\n

Besser:

\n
var first = items.FirstOrDefault(x => x.IsActive);
\n\n

1.4. Asynchronität und Task

\n

In .NET ist Asynchronität Standard. Achten Sie auf:

\n
    \n
  • Wurde await vor einem asynchronen Aufruf vergessen?
  • \n
  • Gibt es blockierende Aufrufe (.Result, .Wait()) in einem synchronen Kontext?
  • \n
  • Wird die Konvention eingehalten: Asynchrone Methoden enden auf Async?
  • \n
\n

Antipattern:

\n
var data = GetDataAsync().Result; // Kann einen Deadlock verursachen
\n

Richtig:

\n
var data = await GetDataAsync();
\n\n

2. Wie man Feedback gibt: Sanft, aber konstruktiv

\n

Selbst die perfekte Checkliste ist nutzlos, wenn Ihre Kommentare wie Kritik klingen. Hier sind einige Regeln, die helfen, das Code-Review für alle nützlich zu machen.

\n\n

2.1. Verwenden Sie "Ich"-Aussagen und Fragen

\n

Sagen Sie statt "Du hast schlechten Code geschrieben" lieber "Ich finde, diese Methode könnte vereinfacht werden. Was meinst du?".

\n

Beispiele für Formulierungen:

\n
    \n
  • "Ich bin nicht siche

Blogs

Buchempfehlungen