2010-09-16 9 views
73

Je souhaite analyser de façon dynamique une arborescence d'objets pour effectuer une validation personnalisée. La validation n'est pas importante en tant que telle, mais je veux mieux comprendre la classe PropertyInfo.Utilisation de PropertyInfo pour connaître le type de propriété

je vais faire quelque chose comme ça,

public bool ValidateData(object data) 
{ 
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties()) 
    { 
     if (the property is a string) 
     { 
      string value = propertyInfo.GetValue(data, null); 

      if value is not OK 
      { 
       return false; 
      } 
     } 
    }    

    return true; 
} 

vraiment la seule partie je me soucie au moment est «si la propriété est une chaîne. Comment puis-je savoir à partir d'un objet PropertyInfo quel type il est.

Je devrai m'occuper de choses de base comme les cordes, les ints, les doubles. Mais je vais devoir traiter aussi avec des objets aussi, et si oui je devrai parcourir l'arborescence d'objets plus bas dans ces objets pour valider les données de base en leur sein, ils auront aussi des cordes etc.

Merci.

Répondre

140

Utilisez PropertyInfo.PropertyType pour obtenir le type de propriété.

public bool ValidateData(object data) 
{ 
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties()) 
    { 
     if (propertyInfo.PropertyType == typeof(string)) 
     { 
      string value = propertyInfo.GetValue(data, null); 

      if value is not OK 
      { 
       return false; 
      } 
     } 
    }    

    return true; 
} 
+0

Très bien. Je vais essayer ça. Est-ce que typeof (string) et typeof (String) sont équivalents? Est-ce que le ci-dessus avec à la fois une chaîne et une chaîne? – peter

+2

OK, écrit quelques tests unitaires et ça marche un régal. Il traite en effet string et String de la même manière. Je m'y attendais, mais je voulais juste m'assurer. – peter

+2

@peter Oui, 'string' et' String' sont égaux. 'string' est un alias pour' String'. – bump

Questions connexes