0 Tage Serie
csharp / expert
Snippet

Funktionale Fehlerbehandlung via Result-Monaden

Erfahrene C#-Entwickler vermeiden das Werfen von Exceptions für erwartete Fehler. Durch die Verwendung eines Result-Record-Structs mit einer Bind-Methode (flatMap) erstellen Sie eine funktionale Pipeline, die Fehler als Daten behandelt, was die Performance und Vorhersehbarkeit verbessert.

snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public readonly record struct Result<T> {
public T? Value { get; }
public string? Error { get; }
public bool IsSuccess { get; }
private Result(T? value, string? error, bool success) =>
(Value, Error, IsSuccess) = (value, error, success);
public static Result<T> Success(T value) => new(value, null, true);
public static Result<T> Failure(string error) => new(default, error, false);
public Result<U> Bind<U>(Func<T, Result<U>> next) =>
IsSuccess ? next(Value!) : Result<U>.Failure(Error!);
}
Erklärung
1
public readonly record struct Result<T>
Verwendet ein readonly record struct für potenzielle Null-Allokation und wertbasierte Semantik.
2
public Result<U> Bind<U>(Func<T, Result<U>> next)
Implementiert die monadische 'bind'-Operation, um Operationen zu verketten, während Fehler automatisch weitergegeben werden.