0 Tage Serie
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 false
LogAndRetry(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.