Gefilterte Ausnahme mit

Gefilterte Ausnahme mit "when"

Du weißt nicht was ein InspirationsMoment ist? Im Hintergrundartikel “Mehr Output! Weniger Input!” bekommst du mehr Informationen dazu.

Exception Filter mit when

C# 6.0 kommt mit einer Funktionalität die es für VB.NET und F# schon lange gibt. Es handelt sich dabei um Exception Filter. Hier ein Beispiel:

try {
  // Dein Code der eine Ausnahme schmeißen könnte
} catch (Exception e) when (
  (DateTime.Now.DayOfWeek == DayOfWeek.Saturday)
  || (DateTime.Now.DayOfWeek == DayOfWeek.Sunday)) {
  // Am Wochenende hast du bestimmt keine Lust dich um Bugs zu kümmern, oder?
  // Nur ein Scherz, aber es zeigt wie es geht.
}

Der entscheidende Punkt ist, dass das Filtern mit when nicht durch ein catch-rethrow erfolgt. Die Exception wird also gar nicht erst gefangen, sondern gleich zum Aufrufer durchgelassen. Dies ist nicht nur ganz nett, sondern hat einen wichtigen Vorteil für das Debugging.

Wenn ein Exception Filter false zurück gibt, wird der Stack Trace nicht verändert. Du bekommst also nicht eine Reihe von catch-throw Einträgen, wenn du dir den Callstack anschaust.

  • In diesem Artikel beschreibt Bill Wagner in großem Detail was Exception Filter sind und vor allem wie sie angewendet werden können.
  • Eine ausführlichere Beschreibung findest du (leider nur in Englisch) im Blog von BlackRabbitCoder.
  • Das Quelltextbeispiel habe ich bei Jimmy Bogard gefunden und angepasst.

Viel Spaß beim Entscheiden ob du eine Ausnahme behandel willst oder nicht

Jan

PS: Gefällt dir das Konzept des InspirationsMoment? Über ein kurzes Feedback würde ich mich freuen.

comments powered by Disqus