0Pricing
C# Academy · Lektion

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

Kurzer Check: Was beschreibt eine Guard-Klausel am besten?

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

  1. Logging-Abstraktionen, Debug/Trace
  2. Grundlagen von Profiling und Traces (Konzepte)
  3. Guard- und Validierungsmuster
← Zurück zu C# Academy