ErrorOr für C# (.NET): Komplette Anleitung zur Fehlerbehandlung ohne Exceptions
In der modernen C# (.NET)-Entwicklung basiert die Fehlerbehandlung traditionell auf dem Exception-Mechanismus. Dieser Ansatz hat jedoch einige Nachteile: Exceptions unterbrechen den Programmablauf, verursachen Stack-Overhead und signalisieren dem Entwickler nicht immer explizit, dass eine Methode fehlschlagen kann. Die Bibliothek ErrorOr bietet eine Alternative – einen funktionalen Ansatz, bei dem das Ergebnis einer Operation als spezielles Objekt zurückgegeben wird, das entweder einen erfolgreichen Wert oder eine Liste von Fehlern enthalten kann.
Die Grundidee von ErrorOr ist es, die Fehlerbehandlung explizit und typsicher zu machen. Anstatt eine Exception zu werfen, gibt die Methode ein Objekt vom Typ ErrorOr<TValue> zurück. Der aufrufende Code muss prüfen, ob die Operation erfolgreich war, bevor er das Ergebnis verwendet. Dies verhindert viele Bugs durch unbehandelte Exceptions und macht den Code vorhersehbarer und leichter verständlich.
Die Bibliothek ist inspiriert von Sprachen mit starken Typsystemen wie Rust (Typ Result<T, E>) und F# (Typ Result<'T, 'TError>). ErrorOr eignet sich ideal für Clean Architecture, Domain-Driven Design (DDD) und CQRS-Projekte, bei denen eine klare Trennung von erfolgreichen und fehlerhaften Szenarien wichtig ist. Sie funktioniert auch hervorragend mit dem „Railway Oriented Programming“-Muster und ermöglicht das Verketten von Operationen mit automatischer Fehlerweitergabe.
Installation
Die Installation der ErrorOr-Bibliothek in einem .NET-Projekt erfolgt über den NuGet-Paketmanager. Führen Sie einen der folgenden Befehle im Terminal oder in der Paketmanager-Konsole aus:
dotnet add package ErrorOr
Oder, wenn Sie die Paketmanager-Konsole in Visual Studio verwenden:
Install-Package ErrorOr
Fügen Sie nach der Installation den entsprechenden Namespace in Ihrer Codedatei hinzu:
using ErrorOr;
Schnellstart: Minimales Arbeitsbeispiel
Schreiben wir eine einfache Funktion, die eine Zahl durch eine andere dividiert. Anstatt eine Exception bei einer Division durch Null zu werfen, geben wir ErrorOr<double> zurück.
using ErrorOr;
public static class Calculator
{
public static ErrorOr<double> Divide(double dividend, double divisor)
{
if (divisor == 0)
{
// Fehler zurückgeben, wenn der Divisor Null ist
return Error.Validation("Calculator.DivisionByZero", "Divisor darf nicht Null sein.");
}
// Erfolgreiches Ergebnis zurückgeben
return dividend / divisor;
}
}
// Verwendung
public class Program
{
public static void Main()
{
ErrorOr<double> result = Calculator.Divide(10, 2);
if (result.IsError)
{
Console.WriteLine($"Operation fehlgeschlagen: {result.FirstError.Description}");
}
else
{
Console.WriteLine($"Ergebnis: {result.Value}");
}
// Beispiel mit Fehler
ErrorOr<double> errorResult = Calculator.Divide(10, 0);
if (errorResult.IsError)
{
Console.WriteLine($"Operation fehlgeschlagen: {errorResult.FirstError.Description}");
}
}
}
In diesem Beispiel sehen wir die wichtigsten Elemente: Erstellen eines Fehlers mit Error.Validation(), Rückgabe eines erfolgreichen Werts (implizite Konvertierung) und Prüfen des Ergebnisses mit der Eigenschaft IsError.
Wichtige Methoden, Funktionen und Klassen
Nachfolgend finden Sie eine detaillierte Erklärung der Kernkomponenten der ErrorOr-Bibliothek. Für jedes Element sind die Signatur, eine Beschreibung und ein funktionierendes Codebeispiel angegeben.
1. Die Klasse ErrorOr<TValue>
Signatur: public rea
Auch in der Bibliothek
Kotlin Task Scheduler: Überblick und Anwendungsbeispiele
openapi-typescript für TypeScript: Komplettleitfaden mit Beispielen
Prometheus-Metriken in Swift: Integration für iOS/macOS-Apps
Standardbibliothek von JavaScript (Node.js): vollständiger Überblick