He creado métodos para convertir una lambda propiedad a un delegado:Creación de un delegado colocador propiedad
public static Delegate MakeGetter<T>(Expression<Func<T>> propertyLambda)
{
var result = Expression.Lambda(propertyLambda.Body).Compile();
return result;
}
public static Delegate MakeSetter<T>(Expression<Action<T>> propertyLambda)
{
var result = Expression.Lambda(propertyLambda.Body).Compile();
return result;
}
Estos trabajos:
Delegate getter = MakeGetter(() => SomeClass.SomeProperty);
object o = getter.DynamicInvoke();
Delegate getter = MakeGetter(() => someObject.SomeProperty);
object o = getter.DynamicInvoke();
pero éstos no se compilará:
Delegate setter = MakeSetter(() => SomeClass.SomeProperty);
setter.DynamicInvoke(new object[]{propValue});
Delegate setter = MakeSetter(() => someObject.SomeProperty);
setter.DynamicInvoke(new object[]{propValue});
Las líneas de MakeSetter fallan con "Los argumentos de tipo no se pueden inferir del uso. Intente especificar los argumentos de tipo e xplicitly ".
¿Es lo que estoy tratando de hacer posible? Gracias por adelantado.
¿Qué lambda haría que funcione? –