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.