19 janvier 2009

Récupérer la valeur d'une propriété d'un objet à partir de son nom

Si vous souhaitez récupérer la valeur d'une propriété ou d'une variable membre publique à partir de son nom, voici 2 méthodes utilitaires permettant de faire cela grâce à la réflexion :


class Objet
{
    public string Nom { get; set; }
    public string Variable;
}

public static class Util
{
    public static T GetValeurProp<T>(this object pObjet, string pNom)
    {
        return (T)pObjet.GetType().GetProperty(pNom).GetValue(pObjet, null);
    }
    public static T GetValeurField<T>(this object pObjet, string pNom)
    {
        return (T)pObjet.GetType().GetField(pNom).GetValue(pObjet);
    }
}

 
class Program
{
    static void Main(string[] args)
    {
        var obj = new Objet() { Nom = "Propriété", Variable = "variable membre publique" };
        Console.WriteLine(obj.GetValeurProp<string>("Nom"));
        Console.WriteLine(obj.GetValeurField<string>("Variable"));
        Console.ReadKey();
    }
}
Grâce aux méthodes GetField(string) et GetProperty(string) de la classe Type, il est possible de récupérer respectivement une variable membre publique et une propriété publique d'une classe à partir d'une chaine de caractères. Après il suffit simplement d'appeler la méthode GetValue des objets FieldInfo et PropertyInfo pour récupérer la valeur de la propriété ou de la variable membre.

Aucun commentaire: