Procedura: identificare un tipo nullable (Guida per programmatori C#)
È possibile utilizzare l'operatore typeof di C# per creare un oggetto Type che rappresenta un tipo nullable:
System.Type type = typeof(int?);
È inoltre possibile utilizzare le classi e i metodi dello spazio dei nomi System.Reflection per generare gli oggetti Type che rappresentano tipi nullable. Tuttavia, se si tenta di ottenere informazioni sul tipo dalle variabili nullable in fase di esecuzione tramite il metodo GetType o l'operatore is, il risultato è un oggetto Type che rappresenta il tipo sottostante, non il tipo nullable.
La chiamata di GetType in un tipo nullable causa la conversione boxing quando il tipo viene convertito in modo implicito in Object. Pertanto, GetType restituisce sempre un oggetto Type che rappresenta il tipo sottostante e non il tipo nullable.
int? i = 5;
Type t = i.GetType();
Console.WriteLine(t.FullName); //"System.Int32"
L'operatore is di C# agisce anche nel tipo sottostante di un tipo nullable. Non è pertanto possibile utilizzare is per determinare se una variabile è di tipo nullable. Nell'esempio seguente viene illustrato come l'operatore is consideri una variabile <int> nullable come int.
static void Main(string[] args)
{
int? i = 5;
if (i is int) // true
//…
}
Esempio
Utilizzare il codice seguente per determinare se un oggetto Type rappresenta un tipo nullable. Si tenga presente che questo codice restituisce sempre false se l'oggetto Type è stato restituito da una chiamata a GetType, come illustrato in precedenza in questo argomento.
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}
Vedere anche
Riferimenti
Tipi nullable (Guida per programmatori C#)
Conversione boxing di tipi nullable (Guida per programmatori C#)