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
Utilizzare QuickGrid di Blazor con Entity Framework
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Utilizzare Tailwind CSS all'interno di React: primi componenti
Miglioramenti agli screen reader e al contrasto in Angular
Sfruttare al massimo i topic space di Event Grid MQTT
Utilizzare un service principal per accedere a Azure Container Registry
Cambiare la chiave di partizionamento di Azure Cosmos DB
Usare un KeyedService di default in ASP.NET Core 8
Generare un hash con SHA-3 in .NET
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Gestire il colore CSS con HWB
Disabilitare automaticamente un workflow di GitHub (parte 2)
I più letti di oggi
- Gli oggetti CallOut di Expression Blend 4.0
- Configurazione tramite environment variable in ASP.NET Core
- Controllare gli accessi IP alle app con Azure Container Apps
- Creare applicazioni web native con Electron
- Utilizzare le sequence di SQL Server in Entity Framework Core
- Update NoDo di marzo 2011 di Windows Phone in fase di distribuzione
- Tile, notifiche e background task in Windows Phone 8
- Mantenere l'ordine dei dati in una query PLINQ