Partager via


Comment : identifier un type nullable (Guide de programmation C#)

Mise à jour : novembre 2007

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 conversion 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<>)) {…}

Voir aussi

Référence

Types nullables (Guide de programmation C#)

Conversion boxing des types nullables (Guide de programmation C#)