C# Academy · Lektion

Mønstre til guards og validering

Validér input tidligt med guard clauses, kast de rigtige undtagelser, og brug kontroller i TryParse-stil til brugerdata.

Lektion 3 af 38 trin

Mønstre til guards og validering er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 3 af 3. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 3 lektioner i alt.

Hvorfor kontrolklausuler

Mål: Hold metoder sikre og læsbare.

  • Brug kontrolklausuler øverst
  • Kast specifikke undtagelser (ArgumentNullException, ArgumentOutOfRangeException)
  • Brug TryParse til brugerindtastning
  • Fejl hurtigt; undgå dyb indlejring

Demonstration af tidlige kontroller

Tilføj små kontroller øverst for at validere argumenter; kast specifikke undtagelser, så kaldere ved, hvad der gik galt.

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-hjælpeklasse

Udtræk almindelige kontroller til en lille Guard-klasse for at holde metodernes kroppe rene og konsistente.

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); }
  }
}

Validering med TryParse

Ved almindelig ugyldig indtastning bør du foretrække metoder i stil med TryParse, som returnerer false i stedet for at kaste undtagelser.

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"));
  }
}

Kast eller returnér

  • Kast ved programmeringsfejl (forkert brug af API'en, null hvor det ikke er tilladt, uden for gyldigt interval)
  • Returnér false/Result ved normale brugerfejl (ugyldig tekst)
  • Brug specifikke undtagelsestyper; medtag parameternavnet
  • Validér udefra og ind: billige kontroller først

Bedste praksis

Tip:

  • Validér ved grænser (controllere, offentlige API'er)
  • Foretræk små kontrol-metoder frem for dyb indlejring
  • Hold fejlmeddelelser korte og tydelige
  • Log én gang ved grænsen, ikke i hver kontrol

Hvad betyder en kontrolklausul

Hurtigt tjek: Hvad beskriver bedst en kontrolklausul?

Opsummering

Opsummering: Validér tidligt med kontrolklausuler, kast specifikke undtagelser ved programmeringsfejl, og brug TryParse til almindelig brugerindtastning.

Gratis at komme i gang

Lær C# med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
93
Lektioner
346

Ofte stillede spørgsmål

Er lektionen “Mønstre til guards og validering” gratis?

Ja — hele teksten til “Mønstre til guards og validering” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 3 lektioner i alt.

Hvad lærer jeg i “Mønstre til guards og validering”?

Validér input tidligt med guard clauses, kast de rigtige undtagelser, og brug kontroller i TryParse-stil til brugerdata. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C# Academy?

Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 3.

Hvor lang tid tager lektionen “Mønstre til guards og validering”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C# Academy-lektion?

Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Logningsabstraktioner, Debug/Trace
  2. Grundlæggende profiling og traces (koncepter)
  3. Mønstre til guards og validering
← Tilbage til C# Academy