Bonne façon de vérifier si un type est Nullable [dupliquer]
Cette question a déjà une réponse ici:
- Comment vérifier si un objet est nullable? 13 réponses
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 ?
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...
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: