C# Academy · Les

Aangepaste uitzonderingen en foutontwerp

Maak kleine aangepaste uitzonderingen, kies de juiste ingebouwde typen (ArgumentException, InvalidOperationException) en voeg context toe met InnerException.

Les 2 van 38 stappen

Aangepaste uitzonderingen en foutontwerp is een gratis C# Academy-les op CoddyKit. Dit is les 2 van 3. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C# Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C# Academy bevat in totaal 3 lessen.

Doel en uitgangspunten

Doel: fouten duidelijk en op te vangen maken.

  • Gebruik een specifiek type voor een specifieke fout
  • Gebruik een goede melding en InnerException voor context
  • Geef de voorkeur aan ingebouwde typen wanneer die geschikt zijn

Aangepast uitzonderingstype

Leid af van Exception, laat de naam eindigen op Exception en voeg de standaardconstructors toe. Neem kleine, nuttige gegevens op.

using System;

// Custom, specific to our domain
public sealed class ConfigNotFoundException : Exception
{
  public string Key { get; private set; }

  public ConfigNotFoundException(string key)
    : base("Config key not found: " + key)
  {
    Key = key;
  }

  public ConfigNotFoundException(string key, Exception inner)
    : base("Config key not found: " + key, inner)
  {
    Key = key;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    try
    {
      throw new ConfigNotFoundException("ApiUrl");
    }
    catch (ConfigNotFoundException ex)
    {
      Console.WriteLine(ex.Message);
    }
  }
}

InnerException voor context

Wikkel uitzonderingen op een lager niveau in een domeinuitzondering en stel InnerException in om de hoofdoorzaak te behouden.

using System;
using System.IO;

public sealed class ConfigNotFoundException : Exception
{
  public string Key { get; private set; }
  public ConfigNotFoundException(string key, Exception inner)
    : base("Config key not found: " + key, inner) { Key = key; }
}

public static class Config
{
  public static string Load(string path, string key)
  {
    try
    {
      string[] lines = File.ReadAllLines(path); // may throw
      for (int i = 0; i < lines.Length; i++)
      {
        int idx = lines[i].IndexOf("=");
        if (idx > 0 && lines[i].Substring(0, idx) == key)
          return lines[i].Substring(idx + 1);
      }
      throw new ConfigNotFoundException(key, null);
    }
    catch (IOException io)
    {
      // Wrap low-level error with domain meaning
      throw new ConfigNotFoundException(key, io);
    }
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    try
    {
      Console.WriteLine(Config.Load("missing.cfg", "ApiUrl"));
    }
    catch (ConfigNotFoundException ex)
    {
      Console.WriteLine("Top: " + ex.Message);
      if (ex.InnerException != null)
        Console.WriteLine("Inner: " + ex.InnerException.GetType().Name);
    }
  }
}

Kies eerst ingebouwde typen

Gebruik ingebouwde typen voor veelvoorkomende problemen: ArgumentNullException, ArgumentOutOfRangeException, FormatException, InvalidOperationException enzovoort.

using System;

public static class MathUtil
{
  public static int Divide(int a, int b)
  {
    if (b == 0) throw new DivideByZeroException();
    return a / b;
  }

  public static int ParsePositive(string text)
  {
    if (text == null) throw new ArgumentNullException("text");
    int value = int.Parse(text); // may throw FormatException
    if (value <= 0) throw new ArgumentOutOfRangeException("text", "must be > 0");
    return value;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    try { Console.WriteLine(MathUtil.ParsePositive("-1")); }
    catch (ArgumentOutOfRangeException ex) { Console.WriteLine("Range: " + ex.ParamName); }
  }
}

Uitzonderingen tegenover controles

Gebruik uitzonderingen voor uitzonderlijke situaties. Geef voor verwachte fouten de voorkeur aan TryX-controles of retourcodes.

using System;

public static class Parser
{
  // BAD: using exceptions for expected cases
  public static int ParseOrThrow(string s)
  {
    return int.Parse(s); // will throw often for user input
  }

  // GOOD: guard-check pattern for expected failure
  public static bool TryParsePositive(string s, out int value)
  {
    value = 0;
    int tmp;
    if (!int.TryParse(s, out tmp)) return false;
    if (tmp <= 0) return false;
    value = tmp;
    return true;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    int v;
    if (Parser.TryParsePositive("12", out v))
      Console.WriteLine("OK " + v);
    else
      Console.WriteLine("Invalid");
  }
}

Checklist voor foutontwerp

Checklist:

  • Kies waar mogelijk een ingebouwd type.
  • Maak anders een kleine CustomException met standaardconstructors.
  • Voeg InnerException toe om de hoofdoorzaak te behouden.
  • Gebruik uitzonderingen voor onverwachte gevallen en TryX voor verwachte fouten.

Ontwerp van aangepaste uitzonderingen

Korte controle: wat is een aanbevolen ontwerp voor een aangepast uitzonderingstype in C#?

Samenvatting

Samenvatting: geef de voorkeur aan ingebouwde uitzonderingen; definieer anders een klein aangepast type met standaardconstructors en gebruik InnerException om context toe te voegen zonder de oorzaak te verliezen.

Gratis beginnen

Leer C# met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
93
Lessen
346

Veelgestelde vragen

Is de les “Aangepaste uitzonderingen en foutontwerp” gratis?

Ja — de volledige tekst van “Aangepaste uitzonderingen en foutontwerp” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C# Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C# Academy bevat in totaal 3 lessen.

Wat leer ik in “Aangepaste uitzonderingen en foutontwerp”?

Maak kleine aangepaste uitzonderingen, kies de juiste ingebouwde typen (ArgumentException, InvalidOperationException) en voeg context toe met InnerException. Je oefent met C# Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C# Academy te beginnen?

Ervaring vooraf is niet nodig. C# Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 3.

Hoe lang duurt de les “Aangepaste uitzonderingen en foutontwerp”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C# Academy?

Ja. Elke les over C# Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. try/catch/finally, throw new versus opnieuw gooien
  2. Aangepaste uitzonderingen en foutontwerp
  3. IDisposable, using-instructie
← Terug naar C# Academy