J'ai créé des méthodes pour convertir un lambda de propriété à un délégué:Création d'un délégué setter de propriété
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;
}
Ces travaux:
Delegate getter = MakeGetter(() => SomeClass.SomeProperty);
object o = getter.DynamicInvoke();
Delegate getter = MakeGetter(() => someObject.SomeProperty);
object o = getter.DynamicInvoke();
mais ceux-ci ne compilera pas:
Delegate setter = MakeSetter(() => SomeClass.SomeProperty);
setter.DynamicInvoke(new object[]{propValue});
Delegate setter = MakeSetter(() => someObject.SomeProperty);
setter.DynamicInvoke(new object[]{propValue});
Les lignes MakeSetter échouent avec "Les arguments de type ne peuvent pas être déduits de l'utilisation. Essayez de spécifier les arguments de type e explicitement. "
Est ce que j'essaye de faire possible? Merci d'avance.
Qu'est-ce que lambda ferait fonctionner? –