Comment : identifier un type Nullable (Guide de programmation C#)
Vous pouvez utiliser l'opérateur C# typeof pour créer un objet Type qui représente un type Nullable :
System.Type type = typeof(int?);
Vous pouvez également utiliser les classes et méthodes de l'espace de noms System.Reflection pour générer des objets Type qui représentent des types Nullable. Toutefois, si pendant l'exécution vous essayez d'obtenir des informations de type à partir de variables Nullable à l'aide de la méthode GetType ou de l'opérateur is, le résultat est un objet Type qui représente le type sous-jacent, pas le type Nullable lui-même.
L'appel de GetType sur un type Nullable entraîne l'exécution d'une opération de boxing lorsque le type est converti implicitement en Object. Par conséquent, GetType retourne toujours un objet Type qui représente le type sous-jacent, pas le type Nullable.
int? i = 5;
Type t = i.GetType();
Console.WriteLine(t.FullName); //"System.Int32"
L'opérateur C# is fonctionne également sur le type sous-jacent d'un type Nullable. Par conséquent, vous ne pouvez pas utiliser is pour déterminer si une variable est de type Nullable. L'exemple suivant montre que l'opérateur is traite une variable Nullable<int> comme un int.
static void Main(string[] args)
{
int? i = 5;
if (i is int) // true
//…
}
Exemple
Utilisez le code suivant pour déterminer si un objet Type représente un type Nullable. Souvenez-vous que ce code retourne toujours la valeur false si l'objet Type a été retourné à partir d'un appel à GetType, comme expliqué plus haut dans cette rubrique.
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}