'Null Reference' è un eccezione tra le più insidiose che possano scaturire durante l'esecuzione di un programma.
Si può presentare anche dopo un lunghissimo tempo da quando il programma è stato lanciato, pertanto
tutti gli sviluppatori impegnano molte risorse per costruire un codice robusto che eviti di inceppare
in questo caso che inevitabilmente porta al termina del processo che sta girando.
Scrivere codice Null Reference Safe è molto pesante, ma oggi C# ci mette a disposizione alcuni
utili strumenti per scrivere in modo più veloce e chiaro.
Ci viene in contro l'operatore (?:) detto operatore condizionale o operatore ternario condizionale
facciamo alcuni esempi:
Supponiamo di trovarci restituire da una funzione un oggetto, esso deve essere testato a null
prima di essere utilizzato
Users Resp = dl.Users.FirstOrDefault(c => c.UserId == inf.DestUserIDToApprove);
L'oggetto restituito ha delle proprietà che devono essere assegnate ad un altro oggetto,
nc.RespExec che non sia Nullable, In questo caso dobbiamo testare che RespExec non sia Null nei seguenti modi
NCM nc = new NCM();
if (Resp != null)
nc.RespProc = Resp.ID;
oppure con l'operatore Ternario
NCM nc = new NCM();
nc.RespProc = Resp != null ? Resp.ID : null;
oppure più semplicemente utilizzando l'operatore ternario sull'oggetto stesso
NCM nc = new NCM();
nc.RespProc = Resp?.ID;
Un'altro operatore che ci può venire incontro è l'operatore
null-coalescing (??), esso ritorna il valore del primo operando
se diverso da null altrimenti asseggna all'oggetto il secondo operando
esempio
Users Resp = dl.Users.FirstOrDefault(c => c.UserId == inf.DestUserIDToApprove) ?? new Users();
in questo caso se l'operazione di lettura da database è andata a buon fine in Resp abbiamo
il record desiderato altrimenti otteniamo un record vuoto, ma con un oggetto che non
genererà mai eccezione.