csharp / expert
Snippet
Stack-erhaltende Ausnahmefilter
Experten-Fehlerbehandlung nutzt 'when'-Klauseln. Im Gegensatz zu einem Standard-Catch-Block wird der Filter ausgewertet, bevor der Stack abgebaut wird. Dies bewahrt den vollständigen Call-Stack für Debugger und ermöglicht selektive Behandlung basierend auf dem Laufzeitstatus.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void ProcessData(string path){try{File.ReadAllText(path);}catch (IOException ex) when (IsTransient(ex)){// Filter 'when' prevents stack unwinding if the condition is falseLogAndRetry(ex);}}private bool IsTransient(IOException ex) =>(uint)ex.HResult == 0x80070020; // Sharing violation
Erklärung
1
when (IsTransient(ex))
Ein boolescher Ausdruck, der wahr sein muss, damit der Catch-Block ausgeführt wird.
2
(uint)ex.HResult == 0x80070020
Prüft auf einen spezifischen zugrunde liegenden OS-Fehlercode, bevor die Exception akzeptiert wird.