Guard- und Validierungsmuster
Validieren Sie Eingaben frühzeitig mit Guard Clauses, lösen Sie die passenden Ausnahmen aus und verwenden Sie Prüfungen nach dem TryParse-Muster für Benutzerdaten.
Guard- und Validierungsmuster ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.
Warum Guard-Klauseln
Ziel: Halten Sie Methoden sicher und lesbar.
- Verwenden Sie am Anfang Guard-Klauseln
- Lösen Sie spezifische Exceptions aus (ArgumentNullException, ArgumentOutOfRangeException)
- Verwenden Sie TryParse für Benutzereingaben
- Schlagen Sie Fehler frühzeitig fehl und vermeiden Sie tiefe Verschachtelungen
Demo zu frühen Guard-Klauseln
Fügen Sie am Anfang kleine Prüfungen hinzu, um Argumente zu validieren. Lösen Sie spezifische Exceptions aus, damit Aufrufer wissen, was schiefgelaufen ist.
using System;
// Demo: validate inputs at the top; keep main logic flat.
public class Program
{
// Compute price with simple rules; guard early.
public static decimal ComputePrice(string sku, int qty, decimal unitPrice)
{
if (sku == null) throw new ArgumentNullException("sku");
if (sku.Length == 0) throw new ArgumentException("sku must not be empty", "sku");
if (qty <= 0) throw new ArgumentOutOfRangeException("qty", "qty must be > 0");
if (unitPrice < 0m) throw new ArgumentOutOfRangeException("unitPrice", "unitPrice must be >= 0");
// Main logic stays simple
decimal subtotal = qty * unitPrice;
if (qty >= 10) subtotal = subtotal * 0.9m; // small bulk discount
return subtotal;
}
public static void Main(string[] args)
{
Console.WriteLine(ComputePrice("ABC", 2, 5m)); // ok
try { Console.WriteLine(ComputePrice("", 2, 5m)); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
}
}
Guard-Hilfsklasse
Lagern Sie wiederkehrende Prüfungen in eine kleine Guard-Klasse aus, damit Methoden übersichtlich und konsistent bleiben.
using System;
// Minimal static helper for common validations (beginner friendly).
public static class Guard
{
public static void NotNull(object value, string name)
{
if (value == null) throw new ArgumentNullException(name);
}
public static void NotNullOrEmpty(string value, string name)
{
if (value == null) throw new ArgumentNullException(name);
if (value.Length == 0) throw new ArgumentException(name + " must not be empty", name);
}
public static void InRange(int value, int minInclusive, int maxInclusive, string name)
{
if (value < minInclusive || value > maxInclusive)
throw new ArgumentOutOfRangeException(name, "Expected " + minInclusive + ".." + maxInclusive);
}
}
public class Program
{
static int ScoreFor(string userId, int level)
{
Guard.NotNullOrEmpty(userId, "userId");
Guard.InRange(level, 1, 10, "level");
// pretend logic
return level * 100;
}
public static void Main(string[] args)
{
Console.WriteLine(ScoreFor("u42", 3));
try { Console.WriteLine(ScoreFor(null, 3)); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
}
}
TryParse-Validierung
Bei regulär ungültigen Eingaben sollten Sie TryParse-artige Methoden bevorzugen, die false zurückgeben, anstatt Exceptions auszulösen.
using System;
// Use TryParse for user-provided text; avoid throwing for normal invalid input.
public class Program
{
public static bool TryGetPort(string text, out int port)
{
port = 0;
int value;
if (!int.TryParse(text, out value)) return false;
if (value < 1 || value > 65535) return false;
port = value;
return true;
}
public static void Main(string[] args)
{
int p;
Console.WriteLine("8080 -> " + (TryGetPort("8080", out p) ? ("ok " + p) : "invalid"));
Console.WriteLine("abc -> " + (TryGetPort("abc", out p) ? ("ok " + p) : "invalid"));
}
}
Auslösen oder zurückgeben
- Throw bei Programmierfehlern (fehlerhafte API-Nutzung, nicht erlaubter Nullwert, Wert außerhalb des gültigen Bereichs)
- Return false/Result bei normalen Benutzereingabefehlern (ungültiger Text)
- Verwenden Sie spezifische Exception-Typen und fügen Sie den Parameternamen ein
- Validieren Sie von außen nach innen: Beginnen Sie mit kostengünstigen Prüfungen
Bewährte Vorgehensweisen
Tipps:
- Validieren Sie an den Grenzen (Controller, öffentliche APIs)
- Bevorzugen Sie kleine Guard-Methoden gegenüber tiefen Verschachtelungen
- Halten Sie Fehlermeldungen kurz und verständlich
- Protokollieren Sie einmal an der Grenze, nicht in jeder Guard-Klausel
Bedeutung einer Guard-Klausel
Zusammenfassung
Zusammenfassung: Validieren Sie frühzeitig mit Guard-Klauseln, lösen Sie bei Programmierfehlern spezifische Exceptions aus und verwenden Sie TryParse für alltägliche Benutzereingaben.
Häufig gestellte Fragen
Ist die Lektion „Guard- und Validierungsmuster“ kostenlos?
Ja — der vollständige Text von „Guard- und Validierungsmuster“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.
Was lerne ich in „Guard- und Validierungsmuster“?
Validieren Sie Eingaben frühzeitig mit Guard Clauses, lösen Sie die passenden Ausnahmen aus und verwenden Sie Prüfungen nach dem TryParse-Muster für Benutzerdaten. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 3.
Wie lange dauert die Lektion „Guard- und Validierungsmuster“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Logging-Abstraktionen, Debug/Trace
- Grundlagen von Profiling und Traces (Konzepte)
- Guard- und Validierungsmuster