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;
}
return car.GetType().GetProperty(propertyName).GetValue(car, null);
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);
}
Puis:
string makeValue = (string)car.GetPropertyValue("Make");
Tu veux de la réflexion
Type t = typeof(Car);
PropertyInfo prop = t.GetProperty("Make");
if(null != prop)
return prop.GetValue(this, null);
É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"));
}
En développant la réponse d'Adam Rackis, nous pouvons rendre la méthode d'extension générique simplement comme ceci:
public static TResult GetPropertyValue<TResult>(this object t, string propertyName)
{
object val = t.GetType().GetProperties().Single(pi => pi.Name == propertyName).GetValue(t, null);
return (TResult)val;
}
Si vous le souhaitez, vous pouvez également gérer certaines erreurs.
En outre, d’autres types répondent, il est facile d’obtenir la valeur de la propriété n’importe quel objet en utilisant une méthode d’extension comme:
public static class Helper
{
public static object GetPropertyValue(this object T, string PropName)
{
return T.GetType().GetProperty(PropName) == null ? null : T.GetType().GetProperty(PropName).GetValue(T, null);
}
}
L'utilisation est:
Car foo = new Car();
var balbal = foo.GetPropertyValue("Make");