Tipi nullable (Guida per programmatori C#)

Aggiornamento: novembre 2007

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.

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 si trattasse di un tipo di valore ordinario, ad esempio int? x = 10; o double? d = 4.108;

  • 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à 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 è 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 una variabile di tipo nullable consente di impostare l'oggetto HasValue su false. L'oggetto Value non è definito.

  • 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 seguente non eseguirà la compilazione: Nullable<Nullable<int>> n;

Sezioni correlate

Per ulteriori informazioni:

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere la seguente sezione inclusa in Specifiche del linguaggio C#:

  • 4.1.10 Tipi nullable

Vedere anche

Attività

Esempio di tipo nullable

Concetti

Guida per programmatori C#

Riferimenti

Nullable

Altre risorse

Visual C#

Riferimenti per C#

What exactly does 'lifted' mean? (informazioni in lingua inglese)