Utilizzo dei tipi di dati nullable in C#
Pagina 1 di 3
Il termine null è un interessante concetto nel mondo della programmazione e non è sinonimo di 'zero' o 'vuoto', ma piuttosto di 'dato non definito'. Si parla di nullabilità (nullability) per riferirsi alla capacità di un tipo dati di accettare e gestire valori null.
Ogni programmatore spesso durante lo sviluppo delle proprie applicazioni si trova ad avere a che fare con i cosiddetti tipi di dati valore (value types) come int, double, bool, char e datetime. Questi tipi di dati sono fondamentali ma hanno una caratteristica un pò scomoda in certi casi, ossia non possono avere valore null.
Fortunatamente C# ed il .NET Framework ci forniscono uno strumento molto utile: i tipi di dati nullable. Questi tipi di dati possono essere utilizzati in ogni punto del codice in cui vi è la necessità di avere una variabile che possa avere dei valori ma che possa anche avere valore null.
Se nel codice di una nostra applicazione scriviamo qualcosa del genere
bool boolTest = null; datetime dataTest = null;otterremo errori in fase di compilazione. Tuttavia spesso si presenta l'esigenza di settare un numero, una variabile booleana o una data ad avere valore null ed in questi casi vengono in nostro soccorso i tipi di dati nullable. Per rendere un tipo di dato nullable in C# tutto quello che occorre fare è porre un punto interrogativo (?) alla fine di ogni tipo di dato valore.
Pertanto se riscriviamo le due variabili precedenti nel seguente modo non avremo più errori in fase di compilazione
bool? boolTest = null; datetime? dataTest = null;
Ogni variabile di tipo nullable espone una proprietà denominata Value, che permette di ottenere o impostare il valore della stessa. Un'altra utile proprietà di questi tipi di dati è HasValue, che restituisce il valore booleano true se la variabile in questione ha un valore non nullo, false altrimenti.
E' sempre possibile convertire un value type in un nullable type
bool dato1 = true; bool? dato2 = dato1ma attenzione che per effettuare la conversione inversa è necessario effettuare il cast del tipo nullable
dato1 = (bool)dato2;
Quando si pone il punto interrogativo a seguire un tipo di dato valore, come int? o decimal?, il compilatore fondamentalmente lo traduce nello struct Nullable<int> o Nullable<decimal>.
Per verificare questa cosa basta aggiungere ad un nostro codice di esempio una variabile Nullable<Datetime> e mettere un breakpoint in sua corrispondenza. Eseguendo il codice ed osservando la finestra Watch visualizzeremo come tipo di dato System.Datetime?.







