NullReferenceException in C#: cos’è e come risolverla

di Lorenzo Neri
0 commento 87 visualizzazioni

Spesso e volentieri durante l’esecuzione può capitare di trovarsi una bella NullReferenceException in C#. In questo articolo scopriamo cos’è e come risolverla.

La NullReferenceException come suggerisce il nome, è un’eccezione che viene generata a seguito di un riferimento che fa riferimento a qualcosa che è “null”. Lo so, è un pessimo gioco di parole, ma utile a farti capire cosa vuol dire questo mega termine in tecnichese 😀

Ciò detto, approfondiamo la questione un passo per volta e vediamo come risolverla davvero.

La causa principale di questa eccezione

Come dicevo all’inizio, questa eccezione viene generata quando si sta letteralmente usato qualcosa che è null.

In linea generale è altamente probabile che stai usando una variabile oppure un oggetto che è null: questo significa che non l’hai mai valorizzato o l’hai valorizzato come null.

Ma in C# cosa significa esattamente “null”?

  • Oggetti o variabili che non sono stati inizializzati e puntano al nulla. In questo caso, se provi ad utilizzare i metodi oppure gli attributi del suddetto, genererai una NullReferenceException.
  • Spesso, nel mondo della programmazione, viene usato null intenzionalmente per indicare che non c’è alcun valore significativo disponibile. Per intenderci, si è soliti fare controlli di questo tipo:
if (oggetto.HasValue){ ... }
if (variabile == null) { ... }

Considera però, che questi controlli li può fare se la variabile oppure oggetto in questione sono nullable. Questa parola, significa che la variabile oppure oggetto in questione può essere null, diversamente anche questi controlli genereranno un’eccezione.

Ora che abbiamo capito che cos’è una NullReferenceException in C# cerchiamo di capire come risolverla.

Debugging per risolvere le NullReferenceException

Ho scritto un articolo intero sulle tecniche di debug e se vuoi approfondire il tema ti invito a dare un occhio qui ma ovviamente non ti lascio a bocca asciutta 😀

Dobbiamo capire cosa genera davvero questa eccezione: quali sono le cause?

Per farlo, è opportuno impostare determinati breakpoint dove la variabile o l’oggetto in questione causano l’eccezione.

E come mai si farà a capire quali siano quelli in questione?

Sono le righe di codice in cui cerchi di accedere ai valori o ai metodi del colpevole in questione 😀

Quando trovi delle righe in cui appunto, cerchi di accedere a questi elementi della variabile in questione, piazzaci un bel breakpoint per capire dove stai sbagliando, persino Microsoft in questo articolo ti offre suggerimenti 🙂

Non solo.

Questo è il metodo principale per risolvere la NullReferenceException, ma immagino che prima di salutarci tu voglia porre rimedio anche ad un’altra cosa.

Come evitare il crash del programma per colpa di una NullReferenceException

Qua la faccenda è semplice.

Dobbiamo usare un “try-catch” come suggerisco nelle tecniche di debug!

Facciamo un esempio molto concreto e diretto:

List<String> stringhe; //Questa lista è null! Non è stata inizializzata!

try{
   String primoValore = stringe.First(); // cerco di prendere il primo valore dentro la lista (che ovviamente non esiste)
}
catch (Exception eccezione){
   Console.WriteLine("C'è stato un errore "+eccezione);
}

Potrebbero interessarti

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più