L’operatore null conditional

L’operatore null-conditional, chiamato anche di null-propagation, che sarà introdotto da C# 6, consente di gestire varie situazioni in cui si rende necessario controllare il fatto che un oggetto sia null, ed evitare di incorrere nelle comuni NullReferenceException, riducendo la quantità di codice ripetitivo da scrivere.
L’operatore ? permette di accedere a membri ed indicizzatori di un oggetto solamente quando l’oggetto stesso non è null, restituendo in caso contrario il valore null. Supponiamo ad esempio di avere una classe Persona così fatta:


class Persona
{ 
public string Nome{get;set;}
public Indirizzo IndirizzoPersona {get;set;}
}


Supponiamo di voler ricavare il Nome da un’istanza p della classe e memorizzarlo in una variabile. La prima cosa di cui essere sicuri è che l’istanza stessa sia diversa da null:

string nome=null;

if(p!=null) nome=p.Nome;


Il primo utilizzo dell’operatore null conditional, permette di evitare l’if/else:

string nome=p?.Nome;


In tal modo, se p è null, la variabile nome assumerebbe valore null, altrimenti il valore della proprietà Nome.
L’operatore è utilizzabile in maniera molto proficua in congiunziona con l’operatore ?? di null coalescing.
Se volessimo infatti assegnare un valore diverso da null alla variabile nome, potremo scrivere:

string nome=p?.Nome ?? "senza nome"; //se p è null restituisce "senza nome"


Così, se p è null, l’operatore null conditional restituirà valore null, e quindio l’operatore ?? a sua volta restituirà il secondo operando “senzanome”.
L’operatore null-conditional è utilizzabile anche con membri indicizzatori, per esempio, supponiamo di voler ricavare il primo carattere del nome dell’istanza p.
Se p è null, l’operatore restituisce null, in caso contrario potrà accedere all’indice zero:

char? primo=p?[0];


Altre caratteristiche dell’operatore Null conditional sono mostrate nella versione completa dell’articolo, pubblicata sul Wiki di MSDN Technet

http://social.technet.microsoft.com/wiki/contents/articles/28821.l-operatore-null-conditional-di-c-6-it-it.aspx

Lascia un commento