Próbuję utworzyć ogólną klasę opakowania, która wywoła metody z wyrażeniami lambda.Utwórz ogólną klasę opakowania, która wywoła metody z wyrażeniami lambda
Kod wygląda następująco:
owijki Klasa:
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());
}
}
Klasa, która jest owinięta:
public class Person
{
public int GetPersonById(int bbb)
{
return bbb;
}
}
miejsce gdzie sprawdził:
var serviceWrapper = new Service<Person>(new Person());
serviceWrapper.Call(x =>x.GetPersonById(2),Console.WriteLine);
Chyba ja trzeba atatch wystąpienie obiektu, który jest „instancja” do wyrażenia metody, ale nie wiem jak ..
Kiedy uruchomić ten kod i uzyskać ten wyjątek:
Zmienna " x 'typu "AsynCtry.Person" przywoływany z zakresu "", ale nie jest zdefiniowany.
Czy istnieje sposób, aby to zrobić?
Tak ... To działa :) dziękuję –