J'ai du mal à créer une classe générique qui appelle les méthodes avec des expressions lambda.
Le code ressemble à ceci :
La classe Wrapper :
public class Service<T>
{
private T instance;
public Service(T param)
{
this.instance = param;
}
public void Call<U>(Expression<Func<T, U>> aExpression, Action<U> returnClass)
{
var methodCallExpr = aExpression.Body as MethodCallExpression
var lambdaToFunc = Expression.Lambda(methodCallExpr).Compile();
returnClass((U)lambdaToFunc.DynamicInvoke());
}
}
La classe qui est enveloppée :
public class Person
{
public int GetPersonById(int bbb)
{
return bbb;
}
}
L'endroit où j'ai passé l'appel :
var serviceWrapper = new Service<Person>(new Person());
serviceWrapper.Call(x =>x.GetPersonById(2),Console.WriteLine);
Je suppose que je dois récupérer l'instance de l'objet qui est " instance " à l'expression de la méthode, mais je ne sais pas comment
Lorsque j'exécute ce code, j'obtiens cette exception :
La variable 'x' de type 'AsynCtry.Person' est référencée depuis la portée '', mais elle n'est pas définie.
Y a-t-il un moyen de le faire ?