Eigene Ausnahmen und Fehlerdesign
Erstellen Sie kleine eigene Ausnahmen, wählen Sie passende integrierte Typen (ArgumentException, InvalidOperationException) und ergänzen Sie Kontext mit InnerException.
Eigene Ausnahmen und Fehlerdesign ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
Zweck & Ziele
Ziel: Machen Sie Fehler verständlich und abfangbar.
- Verwenden Sie für jeden spezifischen Fehler einen spezifischen Typ.
- Eine gute Meldung und InnerException liefern Kontext.
- Bevorzugen Sie integrierte Typen, wenn sie passen.
Benutzerdefinierter Ausnahmetyp
Leiten Sie von Exception ab, beenden Sie den Namen mit Exception und fügen Sie die Standardkonstruktoren hinzu. Übernehmen Sie wenige, nützliche Daten.
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 für Kontext
Umschließen Sie Ausnahmen der unteren Ebene mit einer Domänenausnahme und setzen Sie InnerException, damit die Grundursache erhalten bleibt.
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);
}
}
}
Zuerst integrierte Typen wählen
Verwenden Sie für häufige Probleme integrierte Typen: ArgumentNullException, ArgumentOutOfRangeException, FormatException, InvalidOperationException usw.
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); }
}
}
Ausnahmen im Vergleich zu Guards
Verwenden Sie Ausnahmen für außergewöhnliche Situationen. Bei erwarteten Fehlern bevorzugen Sie TryX-Prüfungen oder Rückgabecodes.
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");
}
}
Checkliste für das Fehlerdesign
Checkliste:
- Wählen Sie nach Möglichkeit einen integrierten Typ.
- Erstellen Sie andernfalls eine kleine CustomException mit Standardkonstruktoren.
- Fügen Sie InnerException hinzu, um die Grundursache zu erhalten.
- Verwenden Sie Ausnahmen für unerwartete Fälle und TryX für erwartete Fehler.
Entwurf benutzerdefinierter Ausnahmen
Zusammenfassung
Zusammenfassung: Bevorzugen Sie integrierte Ausnahmen. Definieren Sie andernfalls einen kleinen benutzerdefinierten Typ mit Standardkonstruktoren und verwenden Sie InnerException, um Kontext hinzuzufügen, ohne die Ursache zu verlieren.
Häufig gestellte Fragen
Ist die Lektion „Eigene Ausnahmen und Fehlerdesign“ kostenlos?
Ja — der vollständige Text von „Eigene Ausnahmen und Fehlerdesign“ 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 „Eigene Ausnahmen und Fehlerdesign“?
Erstellen Sie kleine eigene Ausnahmen, wählen Sie passende integrierte Typen (ArgumentException, InvalidOperationException) und ergänzen Sie Kontext mit InnerException. 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 2 von 3.
Wie lange dauert die Lektion „Eigene Ausnahmen und Fehlerdesign“?
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
- try/catch/finally, throw new und erneutes Auslösen
- Eigene Ausnahmen und Fehlerdesign
- IDisposable, using-Anweisung