184 votes

Comment obtenir une valeur de propriété basée sur le nom

Existe-t-il un moyen d'obtenir la valeur d'une propriété d'un objet en fonction de son nom?

Par exemple si j'ai:

 public class Car : Vehicle
{
   public string Make { get; set; }
}
 

et

 var car = new Car { Make="Ford" };
 

Je veux écrire une méthode où je peux passer le nom de la propriété et qui renverrait la valeur de la propriété. c'est à dire:

 public string GetPropertyValue(string propertyName)
{
   return the value of the property;
}
 

365voto

Matt Greer Points 29401
return car.GetType().GetProperty(propertyName).GetValue(car, null);

55voto

Adam Rackis Points 45559

Il faudrait utiliser la réflexion

 public object GetPropertyValue(object car, string propertyName)
{
   return car.GetType().GetProperties()
      .Single(pi => pi.Name == propertyName)
      .GetValue(car, null);
}
 

Si vous voulez être vraiment chic, vous pouvez en faire une méthode d'extension:

 public static object GetPropertyValue(this object car, string propertyName)
{
   return car.GetType().GetProperties()
      .Single(pi => pi.Name == propertyName)
      .GetValue(car, null);
}
 

Et alors:

 string makeValue = (string)car.GetPropertyValue("Make");
 

43voto

Chuck Savage Points 6106

Tu veux de la réflexion

 Type t = typeof(Car);
PropertyInfo prop = t.GetProperty("Make");
if(null != prop)
return prop.GetValue(this, null);
 

7voto

harveyt Points 150

Échantillon simple (sans code de réflexion écrit sur le client)

 class Customer
{
    public string CustomerName { get; set; }
    public string Address { get; set; }
    // approach here
    public string GetPropertyValue(string propertyName)
    {
        try
        {
            return this.GetType().GetProperty(propertyName).GetValue(this, null) as string;
        }
        catch { return null; }
    }
}
//use sample
static void Main(string[] args)
    {
        var customer = new Customer { CustomerName = "Harvey Triana", Address = "Something..." };
        Console.WriteLine(customer.GetPropertyValue("CustomerName"));
    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X