Bonne façon de vérifier si un type est Nullable [dupliquer]

Cette question a déjà une réponse ici:

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

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

Existe-t-il un moyen d'éviter d'utiliser des chaînes magiques ?

129
demandé sur Felice Pollano 2012-01-20 14:26:20

2 réponses

Absolument utiliser Nullable.GetUnderlyingType:

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

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

Notez également que cela vérifiera s'il représente un type de valeur nullable spécifique (fermé)... cela ne fonctionnera pas si vous l'utilisez sur un type Générique , 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...
262
répondu Jon Skeet 2012-01-20 10:27:52

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é à partir d'un appel à GetType.

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

Expliqué sur le 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?

27
répondu VS1 2017-05-23 12:34:41