Gefilterte Ausnahme mit

Gefilterte Ausnahme mit "when"

Von Jan Suchotzki

Du weißt nicht was ein InspirationsMoment ist? Mit jedem InspirationsMoment zeige ich dir eine kleine Klasse, Methode oder Idee die dir helfen kann deinen C# Code zu verbessern. Dazu gibt es Links zu weiteren Details damit du selber recherchieren kannst wie du es für dich am besten umsetzt.

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.