csharp / expert
Snippet
Fortgeschrittene bedingte Catch-Blöcke für Logging-Abfangmechanismen
Die Fehlerbehandlung auf Expertenniveau nutzt häufig 'Exception Filter', die Logik ausführen, bevor der Stack abgebaut wird. Indem eine Filtermethode 'false' zurückgibt, können Seiteneffekte wie Logging realisiert werden, während die Ausnahme an einen spezifischeren Catch-Block weitergereicht wird.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public bool LogException(Exception ex){Console.WriteLine($"Error: {ex.Message}");return false; // Continues searching for next catch}public void ExecuteProcess(){try{throw new InvalidOperationException("Critical Failure");}catch (Exception ex) when (LogException(ex)){// This block is never reached because LogException returns false}catch (InvalidOperationException ex){// Actual handling happens here after silent logging aboveHandleError(ex);}}
Erklärung
1
when (LogException(ex))
Wertet den Ausdruck aus, ohne die Ausnahme abzufangen, falls dieser false zurückgibt.
2
return false;
Stellt sicher, dass der Filter die Ausnahme nicht 'verbraucht', um den Stack-Trace zu erhalten.