Uno degli errori più comuni che si commettono nella scrittura del codice è il non controllare se un oggetto sia istanziato o meno prima di utilizzare i membri (metodi, proprietà, e così via). Per controllare se effettivamente l'oggetto è istanziato dobbiamo quindi eseguire una if come ne seguente esempio.
if (obj != null) { obj.ExecuteMethod(); }
Quando abbiamo molti oggetti da controllare il codice diventa ripetitivo e quindi facilmente soggetto a errori. C# 6 introduce il Null-conditional operatore che introduce una shortcut per evitare di riempire il codice di controlli sull'istanziazione di un oggetto. Nel prossimo esempio vediamo come possiamo scrivere lo stesso codice visto in precedenza.
obj?.ExecuteMethod();
Aggiungendo il carattere ? alla fine della variabile che rappresenta l'oggetto, indichiamo al compilatore che il metodo (o la proprietà o altro ancora) deve essere acceduto solo se l'oggetto non è null. Come si può immaginare, questa funzionalità di C# riduce drasticamente le linee di codice da scrivere, anche in virtù di alcune peculiarità. Prendiamo il seguente codice come esempio.
int? length = people?.Length; int length = people?.Length ?? 0; Person first = people?[0]; int? first = people?[0].Children?.Count();
Nel primo esempio la proprietà Length è di tipo Int32, ma poichè usiamo il null-conditional operator, il risultato dell'istruzione è un tipo Int32? in quanto se people è null l'istruzione tornerà null. Il secondo esempio mostra come ottenere sempre un valore Int32 combinando il null-coalesce operator con il null-conditional operator. Nel terzo esempio possiamo vedere che il null-conditional operator si applica anche agli indexer, mentre il quarto esempio mostra come si possano anche innestare diverse chiamate.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare Container Queries nominali
Disabilitare automaticamente un workflow di GitHub (parte 2)
Utilizzare il trigger SQL con le Azure Function
Routing statico e PreRendering in una Blazor Web App
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Gestione dell'annidamento delle regole dei layer in CSS
Limitare le richieste lato server con l'interactive routing di Blazor 8
Utilizzare un service principal per accedere a Azure Container Registry
Hosting di componenti WebAssembly in un'applicazione Blazor static
Evitare il flickering dei componenti nel prerender di Blazor 8
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Ottenere un token di accesso per una GitHub App