Tipi nullable (Guida per programmatori C#)
I tipi nullable sono istanze della struttura System.Nullable<T>.Un tipo nullable può rappresentare l'intervallo corretto di valori per il relativo tipo di valore sottostante, più un valore null aggiuntivo.Ad esempio, a un oggetto Nullable<Int32>, che si legge "Nullable di Int32", può essere assegnato un qualsiasi valore compreso tra -2147483648 e 2147483647 oppure il valore null.A un oggetto Nullable<bool> è possibile assegnare i valori true, false o null.La possibilità di assegnare null a tipi numerici e booleani è 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 viene visualizzato l'output:
num = Null
Nullable object must have a value.
Per ulteriori esempi, vedere Utilizzo dei tipi nullable (Guida per programmatori C#)
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 dell'oggetto Nullable<T>, in cui l'oggetto T è un tipo di valore.Le due forme sono intercambiabili.
Assegnare un valore a un tipo nullable come se fosse un tipo di valore ordinario, ad esempio int? x = 10; o double? d = 4.108.È possibile inoltre assegnare un valore null: int? x = null. al tipo nullable.
Utilizzare il metodo Nullable<T>.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à di sola lettura HasValue e Value per controllare i valori Null e recuperare il valore, come illustrato nell'esempio seguente: if(x.HasValue) j = x.Value;
La proprietà HasValue restituisce true se la variabile contiene un valore o false se è null.
La proprietà Value restituisce un valore se ne è stato assegnato uno.In caso contrario, verrà generata un'eccezione System.InvalidOperationException.
Il valore predefinito di HasValue è false.La proprietà Value non ha valori predefiniti.
È anche possibile utilizzare gli operatori == e != con un tipo nullable, come illustrato nel seguente esempio: if (x != null) y = x;
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 annidati non sono consentiti.La riga seguente non eseguirà la compilazione: Nullable<Nullable<int>> n;
Sezioni correlate
Per ulteriori informazioni:
Specifiche del linguaggio C#
Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.