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
Gestire i dati con Azure Cosmos DB Data Explorer
Creare una libreria CSS universale: Immagini
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Creare una libreria CSS universale: Clip-path
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Creare una libreria CSS universale - Rotazione degli elementi
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Disabilitare automaticamente un workflow di GitHub
Eseguire script pre e post esecuzione di un workflow di GitHub
Generare un hash con SHA-3 in .NET