2009-07-30 9 views
2

Je voudrais utiliser la réflexion pour étudier les champs privés d'un objet ainsi que pour obtenir les valeurs dans ces champs mais j'ai du mal à trouver la syntaxe pour cela.Comment obtenir des instances dans tous les champs privés d'un objet?

Par exemple, un objet a 6 champs privés, mon hypothèse est que je pourrais aller chercher leur FieldInfo avec quelque chose comme

myObject.GetType().GetFields(BindingFlags.NonPublic) 

mais pas de dés - l'appel retourne un tableau de 0.

Ce qui est la syntaxe correcte pour accéder aux champs?

Répondre

6
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static 
+1

Ahh, c'est l'instance qui me manquait –

+0

Juste ajouté le bit statique au cas où vous aussi besoin de cela :) – leppie

1

Vous devez également ajouter BindingFlags.Instance

myObject.GetType().GetFields(BindingFlags.NonPublic|BindingFlags.Instance) 
4

Vous avez les drapeaux remplacées par défaut, vous devez donc ajouter Instance retour dans ...

myObject.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance) 
+0

+1 pour l'explication .. –

1

Depuis vous souhaitez récupérer les champs et les valeurs:

from field in myObject.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance) 
select new 
{ 
    Field = field, 
    Value = field.GetValue(myObject) 
}; 
Questions connexes