Una delle nuove funzionalità implementate da C# 6, ma che era già implementata a livello di .NET Framework per Visual Basic ed F#, riguarda i filtri applicabili alle eccezioni: è infatti possibile applicare delle condizioni ai blocchi catch per essere ancora più precisi nella gestione dell'eccezione generata.
try { throw new NotImplementedException(); } catch (Exception ex) when (DateTime.Now.DayOfWeek == DayOfWeek.Friday) { }
In questo caso l'eccezione viene gestita solamente quando il giorno della settimana è venerdì, quindi è chiaro che, oltre a questo blocco catch, sarebbe bene gestire anche il caso generico senza l'exception filter, altrimenti l'applicazione rimanderà l'eccezione cercando qualcuno che la possa gestire, fino a, eventualmente, far terminare l'applicazione.
E' anche possibile, in caso di codice molto più complesso, definire una funzione che possa gestire il filtro:
catch (Exception ex) when (HandleCondition(ex)) private static bool HandleCondition(Exception ex) { // gestione dell'eccezione, log, etc... // ritorno true o false per decidere se devo entrare nel blocco catch return true; }
Ovviamente tutto ciò era realizzabile anche prima di C# 6 con una serie di if in cascata all'interno dello stesso blocco catch per gestire la stessa eccezione, ma questo metodo è da preferire poiché, dentro il catch, è difficile recuperare lo stacktrace corretto, mentre da fuori è più facile capire quello che sta succedendo (e quindi gestire meglio l'eventuale errore generato), rendendo l'applicazione comunque molto più performante.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire operazioni sui blob con Azure Storage Actions
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
C# 12: Cosa c'è di nuovo e interessante
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Utilizzare Copilot con Azure Cosmos DB
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Gestire domini wildcard in Azure Container Apps
Miglioramenti nell'accessibilità con Angular CDK
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL