Tipi nullable (Guida per programmatori C#)
I tipi nullable sono istanze della struttura System.Nullable. Un tipo nullable può rappresentare l'intervallo normale di valori per il relativo tipo di valore sottostante, più un valore null aggiuntivo. Ad esempio, al valore Nullable<Int32>, che si legge "Nullable di Int32", può essere assegnato qualsiasi valore compreso tra -2147483648 e 2147483647 oppure il valore null. A un valore Nullable<bool> può invece essere assegnato il valore true o false oppure null. La possibilità di assegnare null a tipi numerici e Boolean risulta particolarmente utile quanto si utilizzano database e altri tipi di dati contenenti elementi a cui non sarebbe possibile assegnare un valore. Ad esempio, in un campo Boolean di un database è possibile archiviare il valore true o false oppure è possibile lasciarlo indefinito.
class NullableExample
{
static void Main()
{
int? num = null;
if (num.HasValue == true)
{
System.Console.WriteLine("num = " + num.Value);
}
else
{
System.Console.WriteLine("num = Null");
}
//y is set to zero
int y = num.GetValueOrDefault();
// num.Value throws an InvalidOperationException if num.HasValue is false
try
{
y = num.Value;
}
catch (System.InvalidOperationException e)
{
System.Console.WriteLine(e.Message);
}
}
}
Nell'esempio riportato in precedenza verrà visualizzato l'output:
num = Null
Nullable object must have a value.
Informazioni preliminari sui tipi nullable
Di seguito sono riportate le caratteristiche dei tipi nullable:
I tipi nullable rappresentano variabili di tipo di valore a cui è possibile assegnare il valore di null. Non è possibile creare un tipo nullable basato su un tipo di riferimento. (I tipi di riferimento supportano già il valore null.)
La sintassi T? è una forma abbreviata di System.Nullable<T>, in cui T è un tipo di valore. Le due forme sono intercambiabili.
Assegnare un valore a un tipo nullable come se si trattasse di un tipo di valore ordinario, ad esempio
int? x = 10;
odouble? d = 4.108;
Utilizzare la proprietà System.Nullable.GetValueOrDefault per restituire il valore assegnato o il valore predefinito per il tipo sottostante se il valore è null, ad esempio
int j = x.GetValueOrDefault();
Utilizzare le proprietà in sola lettura HasValue e Value per verificare se il valore è null e per recuperarlo, ad esempio
if(x.HasValue) j = x.Value;
La proprietà HasValue restituisce true se la variabile contiene un valore oppure false se il valore è null.
La proprietà Value restituisce un valore se ne è stato assegnato uno, in caso contrario viene generata un'eccezione System.InvalidOperationException.
Per impostazione predefinita, una variabile di tipo nullable imposta HasValue su false. Value è indefinito.
Utilizzare l'operatore ?? per assegnare un valore predefinito che verrà applicato quando un tipo nullable, il cui valore corrente è null, viene assegnato a un tipo non nullable, ad esempio
int? x = null; int y = x ?? -1;
I tipi nullable nidificati non sono consentiti. La riga riportata di seguito non verrà compilata:
Nullable<Nullable<int>> n;
Sezioni correlate
Per ulteriori informazioni:
Specifiche del linguaggio C#
Per ulteriori informazioni, vedere le sezioni riportate di seguito in Specifiche del linguaggio C#:
- 24 Tipi nullable