Tipi nullable (Guida per programmatori C#)Nullable Types (C# Programming Guide)

I tipi nullable sono istanze dello struct System.Nullable<T>.Nullable types are instances of the System.Nullable<T> struct. Un tipo nullable può rappresentare l'intervallo di valori corretto del tipo valore sottostante, più un valore null aggiuntivo.A nullable type can represent the correct range of values for its underlying value type, plus an additional null value. Ad esempio, a un tipo Nullable<Int32>, detto anche "Nullable of Int32", può essere assegnato qualsiasi valore compreso tra -2147483648 e 2147483647. In alternativa, può essere assegnato il valore null.For example, a Nullable<Int32>, pronounced "Nullable of Int32," can be assigned any value from -2147483648 to 2147483647, or it can be assigned the null value. A un tipo Nullable<bool> può essere assegnato il valore true, false o null.A Nullable<bool> can be assigned the values true, false, or null. La possibilità di assegnare il valore null a tipi numerici e booleani è particolarmente utile quando si gestiscono database e altri tipi di dati contenenti elementi a cui non è possibile assegnare un valore.The ability to assign null to numeric and Boolean types is especially useful when you are dealing with databases and other data types that contain elements that may not be assigned a value. Ad esempio, un campo booleano di un database può archiviare i valori true o false oppure può essere non definito.For example, a Boolean field in a database can store the values true or false, or it may be undefined.

using System;

class NullableExample
{
  static void Main()
  {
      int? num = null;

      // Is the HasValue property true?
      if (num.HasValue)
      {
          Console.WriteLine("num = " + num.Value);
      }
      else
      {
          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 (InvalidOperationException e)
      {
         Console.WriteLine(e.Message);
      }
   }
}
// The example displays the following output:
//       num = Null
//       Nullable object must have a value.

Per altri esempi, vedere Uso dei tipi nullableFor more examples, see Using Nullable Types

Panoramica dei tipi nullableNullable Types Overview

I tipi nullable hanno le caratteristiche seguenti:Nullable types have the following characteristics:

  • I tipi nullable rappresentano variabili di tipo valore a cui può essere assegnato il valore null.Nullable types represent value-type variables that can be assigned the value of null. Non è possibile creare un tipi nullable sulla base di un tipo riferimento.You cannot create a nullable type based on a reference type. I tipi riferimento supportano già il valore null.(Reference types already support the null value.)

  • La sintassi T? è l'abbreviazione di Nullable<T>, dove T è un tipo valore.The syntax T? is shorthand for Nullable<T>, where T is a value type. Le due forme sono intercambiabili.The two forms are interchangeable.

  • Per assegnare un valore a un tipo nullable è possibile procedere come per un comune tipo valore, ad esempio int? x = 10; o double? d = 4.108.Assign a value to a nullable type just as you would for an ordinary value type, for example int? x = 10; or double? d = 4.108. A un tipo nullable può essere assegnato anche il valore null: int? x = null.A nullable type can also be assigned the value null: int? x = null.

  • Usare il metodo Nullable<T>.GetValueOrDefault per restituire il valore assegnato oppure il valore predefinito del tipo sottostante se il valore è null, ad esempio int j = x.GetValueOrDefault();Use the Nullable<T>.GetValueOrDefault method to return either the assigned value, or the default value for the underlying type if the value is null, for example int j = x.GetValueOrDefault();

  • Usare le proprietà di sola lettura HasValue e Value per verificare la presenza di valori null e recuperare il valore, come illustrato nell'esempio seguente: if(x.HasValue) j = x.Value;Use the HasValue and Value read-only properties to test for null and retrieve the value, as shown in the following example: if(x.HasValue) j = x.Value;

    • La proprietà HasValue restituisce true se la variabile contiene un valore o false se è null.The HasValue property returns true if the variable contains a value, or false if it is null.

    • La proprietà Value restituisce un valore se ne è stato assegnato uno.The Value property returns a value if one is assigned. In caso contrario viene generata un'eccezione System.InvalidOperationException.Otherwise, a System.InvalidOperationException is thrown.

    • Il valore predefinito per la proprietà HasValue è false.The default value for HasValue is false. La proprietà Value non ha alcun valore predefinito.The Value property has no default value.

    • Con un tipo nullable è anche possibile usare gli operatori == e !=, come mostrato nell'esempio seguente: if (x != null) y = x;You can also use the == and != operators with a nullable type, as shown in the following example: if (x != null) y = x;

  • Usare 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;Use the ?? operator to assign a default value that will be applied when a nullable type whose current value is null is assigned to a non-nullable type, for example int? x = null; int y = x ?? -1;

  • I tipi nullable nidificati non sono consentiti.Nested nullable types are not allowed. La riga seguente non verrà compilata: Nullable<Nullable<int>> n;The following line will not compile: Nullable<Nullable<int>> n;

Per ulteriori informazioni:For more information:

Specifiche del linguaggio C#C# Language Specification

Per altre informazioni, vedere la specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.

Vedere ancheSee Also

Nullable
Guida per programmatori C#C# Programming Guide
C#C#
Riferimenti per C#C# Reference
Cosa significa esattamente "elevato"?What exactly does 'lifted' mean?