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
Ottimizzare le performance usando Span<T> e il metodo Split
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Recuperare le subissue e il loro stato di completamento in GitHub
Effettuare un clone parziale di un repository di GitHub
Mischiare codice server side e client side in una query LINQ con Entity Framework
Integrare Agenti A2A in Azure API Management
DevSecOps per .NET: dalla teoria alla pratica
Dallo sviluppo locale ad Azure con .NET Aspire
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Integrare modelli AI in un workflow di GitHub
Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
Testare il failover sulle region in Azure Storage
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Sfruttare una CDN con i bundle di ASP.NET
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Le DirectInk API nella Universal Windows Platform
- Gli oggetti CallOut di Expression Blend 4.0
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Inserire le news di Punto Informatico nel proprio sito


