Trouver le type de nullable propriétés via la réflexion
J'examine les propriétés d'un objet de réflexion et de poursuivre le traitement du type de données de chaque propriété. Voici mon (réduit) source:
private void ExamineObject(object o)
{
Type type = default(Type);
Type propertyType = default(Type);
PropertyInfo[] propertyInfo = null;
type = o.GetType();
propertyInfo = type.GetProperties(BindingFlags.GetProperty |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance);
//Loop over all properties
for (int propertyInfoIndex = 0; propertyInfoIndex <= propertyInfo.Length - 1; propertyInfoIndex++)
{
propertyType = propertyInfo[propertyInfoIndex].PropertyType;
}
}
Mon problème, c'est que j'ai nouvellement besoin de gérer nullable propriétés, mais je n'ai aucune idée de comment faire pour obtenir le type de nullable propriété.
Vous devez vous connecter pour publier un commentaire.
solution possible:
propertyType = Nullable.GetUnderlyingType(propertyType) ?? propertyType
propertyType.IsGenericType
est nécessaire, en effet, avant depropertyType.GetGenericTypeDefinition()
, sinon une exception est levée. +1Nullable.GetUnderlyingType(fi.FieldType)
va faire le travail pour vous, vérifiez ci-dessous le code pour faire la chose que vous voulezNullable.GetUnderlyingType(type)
solution car elle est plus explicite quetype.GetGenericArguments()[0]
, au moins dans ce cas.Nullable.GetUnderlyingType
déjà le faire nativement. GetUnderlyingType retourne null si le type n'est pas Nullable<> (source: msdn.microsoft.com/en-US/library/...)Cette méthode est facile, rapide et sécuritaire
Je suis l'aide d'une boucle pour parcourir toutes les propriétés de la classe pour obtenir le type de propriété. J'utilise le code suivant: