Tenemos un código que, dado el nombre de una propiedad, utiliza la reflexión para implementar un Comparador.Dado el nombre de una propiedad, ¿cómo puedo crear un delegado para obtener su valor?
Me gustaría almacenar un delegado/Func para obtener el valor en lugar de pagar el precio de reflexión cada vez que necesitamos obtener un valor.
dado una clase como esta:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Traté de escribir una función que crearía un delegado para mí
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());
}
El siguiente código funciona bien para la Obtención del nombre
var person = new Person { Name = "Dave", Age = 42 };
var funcitonToGetName = CreateGetFuncFor<Person>("Name");
Console.WriteLine(funcitonToGetName(person));
var functionToGetAge = CreateGetFuncFor<Person>("Age");
pero para la edad de la edad arroja una ArgumentException con el mensaje "Error vinculante para targ et método "
¿Qué me estoy perdiendo? ¿Hay alguna otra forma de hacerlo?
¡Gracias a ambos Lukes! – Argos