Come proteggersi da Null Reference Exception in C#
programmazione tips

Linguaggi
Autore:


'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.


Articoli in evidenza
I più visti