168 votes

Méthode correcte pour vérifier si un type est Nullable

Afin de vérifier si un Type ( propertyType ) est nullable, je l'utilise :

bool isNullable =  "Nullable`1".Equals(propertyType.Name)

Existe-t-il un moyen d'éviter l'utilisation de chaînes magiques ?

347voto

Jon Skeet Points 692016

Absolument - utilisez Nullable.GetUnderlyingType :

if (Nullable.GetUnderlyingType(propertyType) != null)
{
    // It's nullable
}

Notez que cela utilise la classe statique non générique System.Nullable plutôt que la structure générique Nullable<T> .

Notez également que cela vérifiera si elle représente un spécifique (fermé) nullable... cela ne fonctionnera pas si vous l'utilisez sur un type de valeur Générique type, par exemple

public class Foo<T> where T : struct
{
    public Nullable<T> Bar { get; set; }
}

Type propertyType = typeof(Foo<>).GetProperty("Bar").PropertyType;
// propertyType is an *open* type...

41voto

VS1 Points 3361

Utilisez le code suivant pour déterminer si un objet Type représente un type Nullable. Rappelez-vous que ce code renvoie toujours false si l'objet Type a été renvoyé par un appel à GetType.

if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}

expliqué au lien MSDN ci-dessous :

http://msdn.microsoft.com/en-us/library/ms366789.aspx

De plus, il y a une discussion similaire à ce SO QA :

Comment vérifier si un objet est nullable ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X