C# 6.0 - NULL PROPAGATING OPERATOR ?.

C# 6.0 porta con se tantissime novità. Una di questa è l'operatore null propagating ?., che permette l'accesso ai membri di un oggetto nullable solo quando esso non è nullo, altrimenti restituisce proprio null. 

Questo significa che il suo risultato deve essere assegnato ad un oggetto nullable, o in alternativa combinato con l'operatore di coalesing ??.

Chiariamo meglio il funzionamento di questo operatore con un esempio.

Si supponga di avere un modello costituito dalle seguenti classi:

class Alunno
{
    public int ID { getset; }
    public string Name { getset; }
    public DateTime DataNascita { getset; }
    public Insegnante Insegnante { getset; }
}

class Insegnante
{    public int ID { getset; }    public string Nome { getset; }    public virtual IList<Alunno> Alunni { getset; } }

e una classe Repository che popola una collezione di Insegnanti, con due insegnanti: uno ha degli alunni, l'altro no.

Si supponga di voler visualizzare in una console, il numero di alunni associati a ciascun insegnante. Senza l'operatore null propagation per determinare il numero di alunni associati a ciascun insegnante, il codice da scrivere sarebbe stato:


int? numeroAlunni = item.Alunni!= null  ? item.Alunni.Count() : null 


Con c# 6.0 questa riga di codice diventa:



int? numeroAlunni = item.Alunni?.Count();

Se poi non si vuole assegnare il risultato dell'operatore null propagation ad un tipo non nullable, basta combinarlo con l'operatore di coalescing ??:

 
int numeroAlunni = item.Alunni?.Count()??0;
 

L'operatore null propagation può anche essere concatenato, e così se la classe Repository espone la collezione di Insegnanti, ma questa non  è stata ancora inizializzata è possibile scrivere:

 
int? count = repository?.Insegnanti?.First()?.Alunni?.Count(); 

Qui potete scaricare il piccolo esempio contenente le classi descritte prima. 
Vi ricordo che per eseguire il codice riportato nel file è necessario aver installato
 Visual Studio 2014 CTP

Aggiungi Commento