0 Tage Serie
csharp / expert
Snippet

Vollständige verschachtelte Muster-Wächter

Moderner C#-Kontrollfluss nutzt Pattern Matching, um komplexe Zustandsbewertungen deklarativ zu verarbeiten. Eigenschaftsmuster und relationale Muster (wie `> 5`) ermöglichen eine ausdrucksstarke Logik, die lesbarer und weniger fehleranfällig ist als verschachtelte `if-else`-Blöcke, während der `switch`-Ausdruck eine vollständige Behandlung sicherstellt.

snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public record User(string Role, bool IsActive, int AccessLevel);
public class AuthProcessor
{
public string EvaluateAccess(User user) => user switch
{
{ Role: "Admin", IsActive: true } => "Full Access",
{ Role: "Editor", AccessLevel: > 5 } => "Restricted Edit",
{ Role: var r, IsActive: false } => $"Suspended {r}",
_ => "Access Denied"
};
public static bool IsComplexMatch(object obj) => obj switch
{
int[] { Length: > 0 } arr when arr[0] > 100 => true,
string s or (int or long) => true,
_ => false
};
}
Erklärung
1
{ Role: "Editor", AccessLevel: > 5 }
Kombiniert ein Eigenschaftsmuster mit einem relationalen Muster, um spezifische Objektzustände abzugleichen.
2
int[] { Length: > 0 } arr when arr[0] > 100
Ein Positionsmuster kombiniert mit einem 'when'-Wächter, um eine tiefe Inspektion des Array-Inhalts durchzuführen.