Nous avons du code qui donne un nom de propriété utilise la réflexion pour implémenter un Comparer.Étant donné un nom de propriété, comment puis-je créer un délégué pour obtenir sa valeur
Je voudrais stocker un délégué/Func pour obtenir la valeur plutôt que de payer le prix de réflexion chaque fois que nous avons besoin d'obtenir une valeur.
donné une classe comme ceci:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
J'ai essayé d'écrire une fonction qui créerait un délégué pour moi
Func<T, object> CreateGetFuncFor<T>(string propertyName)
{
PropertyInfo prop = typeof(T).GetProperty(propertyName);
return (Func<T, object>)Delegate.CreateDelegate(typeof(Func<T, object>),
null,
prop.GetGetMethod());
}
Le code suivant fonctionne très bien pour l'obtention du nom
var person = new Person { Name = "Dave", Age = 42 };
var funcitonToGetName = CreateGetFuncFor<Person>("Name");
Console.WriteLine(funcitonToGetName(person));
var functionToGetAge = CreateGetFuncFor<Person>("Age");
mais pour la propriété Age, il déclenche une exception ArgumentException avec le message "Error binding to targ et méthode "
Qu'est-ce qui me manque? Y a-t-il un autre moyen de le faire?
Merci à Lukes! – Argos