C# 创建一个通用包装器类,该类将使用lambda表达式调用方法
我正在努力创建一个通用包装器类,它将使用lambda表达式调用这些方法 代码如下所示: 包装器类:C# 创建一个通用包装器类,该类将使用lambda表达式调用方法,c#,generics,lambda,expression-trees,C#,Generics,Lambda,Expression Trees,我正在努力创建一个通用包装器类,它将使用lambda表达式调用这些方法 代码如下所示: 包装器类: public class Service<T> { private T instance; public Service(T param) { this.instance = param; } public void Call<U>(Expression<Func<T, U>> aExpre
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());
}
}
我打电话的地方:
var serviceWrapper = new Service<Person>(new Person());
serviceWrapper.Call(x =>x.GetPersonById(2),Console.WriteLine);
var serviceWrapper=new服务(new Person());
serviceWrapper.Call(x=>x.GetPersonById(2),Console.WriteLine);
我想我必须将对象的实例“instance”匹配到方法表达式,但我不知道如何
运行此代码时,会出现以下异常:
从作用域“”引用了类型为“AsynCtry.Person”的变量“x”,但未定义该变量
有什么方法可以做到这一点吗?这不需要表达式-直接使用委托即可:
public void Call<U>(Func<T, U> aExpression, Action<U> returnClass)
{
U result = aExpression(this.instance);
returnClass(result);
}
public void调用(Func-aExpression,Action-returnClass)
{
U result=aExpression(this.instance);
返回类(结果);
}
您的方法调用应该正常工作,然后:
var serviceWrapper = new Service<Person>(new Person());
serviceWrapper.Call(x => x.GetPersonById(2), u => Console.WriteLine(u));
var serviceWrapper=new服务(new Person());
调用(x=>x.GetPersonById(2),u=>Console.WriteLine(u));
var serviceWrapper = new Service<Person>(new Person());
serviceWrapper.Call(x => x.GetPersonById(2), u => Console.WriteLine(u));