2010-08-24 6 views
0

Je réfléchis sur un objet et je ne veux que les propriétés publiques d'une instance, je ne veux pas de propriétés statiques publiques. Le problème est GetProperties() renvoie à la fois statique et propriétés publique d'instance. Quelqu'un a une idée de la meilleure façon d'aborder ce problème?Comment utiliser la réflexion pour obtenir uniquement les propriétés publiques de l'instance d'objet?

private IOrderedEnumerable<PropertyInfo> GetSortedPropInfos() 
{ 
    return dataExtractor.GetType().GetProperties().OrderBy(
      p => p.Name); 
} 

Remarque, je trier la liste depuis GetProperties() ne précise pas le type de commande, et la commande est importante pour moi.

Répondre

1
private IOrderedEnumerable<PropertyInfo> GetSortedPropInfos() 
{ 
    return dataExtractor.GetType() 
         .GetProperties(BindingFlags.Instance | BindingFlags.Public) 
         .OrderBy(p => p.Name); 
} 
+0

Merci, cela fonctionne très bien. – Don

1

Utilisez the other overload of GetProperties, qui vous permet de spécifier drapeaux de liaison tels que BindingFlags.Instance.

return dataExtractor.GetType().GetProperties(
     BindingFlags.Instance | BindingFlags.Public).OrderBy(
     p => p.Name); 
0

Eh oui, vous devez définir les indicateurs de liaison dans le constructeur. Les drapeaux de liaison spécifient les drapeaux qui contrôlent la liaison et la façon dont la recherche des membres et des types est effectuée par réflexion. Jetez un oeil à l'adresse suivante pour plus d'informations:

BindingFlags Enumeration: http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx

+0

Lien très utile, merci. – Don

0

Il suffit de remarquer un additif aux autres réponses - également utiliser BindingFlags.DeclaredOnly si vous ne voulez pas les propriétés héritées.

Questions connexes