web-dev-qa-db-fra.com

Comment obtenir une valeur de propriété en utilisant la réflexion

J'ai le code suivant:

FieldInfo[] fieldInfos;
fieldInfos = GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

Ce que j'essaie de faire, c'est d'obtenir la valeur d'une de mes propriétés de l'instance instanciée actuelle au moment de l'exécution en utilisant la réflexion. Comment puis-je faire ceci?

39
Icemanind

Quelque chose comme ça devrait fonctionner:

var value = (string)GetType().GetProperty("SomeProperty").GetValue(this, null);
87
James Johnson

Essayez la méthode GetProperties , elle devrait vous obtenir la propriété, au lieu des champs.

Pour récupérer la valeur, faites quelque chose comme ceci:

object foo = ...;
object propertyValue = foo.GetType().GetProperty("PropertyName").GetValue(foo, null);

Cela utilise GetProperty, qui renvoie un seul objet PropertyInfo, plutôt qu'un tableau d'entre eux. Nous appelons ensuite GetValue, qui prend un paramètre de l'objet pour récupérer la valeur (le PropertyInfo est spécifique au type, pas à l'instance). Le deuxième paramètre de GetValue est un tableau d'indexeurs, pour les propriétés d'index, et je suppose que la propriété qui vous intéresse n'est pas une propriété indexée. (Une propriété indexée vous permet de faire list[14] pour récupérer le 14e élément d'une liste.)

22
David Yaw