0 Tage Serie
csharp / expert
Snippet

Erschöpfendes Pattern Matching für Domain-Logik

Die Nutzung rekursiver Patterns und Guard-Klauseln ermöglicht deklarativen, typsicheren Kontrollfluss. Dieses Muster emuliert funktionale 'match'-Ausdrücke und stellt sicher, dass alle möglichen Datenformen explizit auf Funktionsebene behandelt werden.

snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
public record ProcessingState;
public record Idle : ProcessingState;
public record Working(int Progress) : ProcessingState;
public record Faulted(string Error) : ProcessingState;
public static string Describe(ProcessingState state) => state switch
{
Idle => "System is dormant",
Working { Progress: > 90 } => "Almost finished...",
Working w => $"Processing: {w.Progress}%",
Faulted(var msg) => $"Critical Failure: {msg}",
_ => throw new ArgumentException("Unknown state", nameof(state))
};
Erklärung
1
Working { Progress: > 90 }
Ein Property-Pattern mit einem relationalen Sub-Pattern, um spezifische Objektzustände zu filtern.
2
Faulted(var msg)
Positionsabhängige Dekonstruktion eines Records, um den internen Zustand direkt zu extrahieren.