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
Inizializzare i container in Azure Container Apps
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Utilizzare Tailwind CSS all'interno di React: installazione
Utilizzare politiche di resiliency con Azure Container App
Routing statico e PreRendering in una Blazor Web App
.NET Conference Italia 2023
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Disabilitare automaticamente un workflow di GitHub
Utilizzare gli snapshot con Azure File shares