簡體   English   中英

創建一個通用的包裝類,它將使用lambda表達式調用方法

[英]create a generic wrapper class which will call the methods with lambda expressions

我正在努力創建一個通用的包裝類,它將使用lambda表達式調用方法。

代碼如下所示:

包裝類:

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());
    }
}

被包裝的類:

public class Person
{
    public int GetPersonById(int bbb)
    {
        return bbb;
    }
}

我打電話的地方:

var serviceWrapper = new Service<Person>(new Person());
serviceWrapper.Call(x =>x.GetPersonById(2),Console.WriteLine);

我想我必須為方法表達式提供對象的實例“ 實例 ”,但我不知道如何...

當我運行此代碼時,我得到以下異常:

從范圍''引用的'AsynCtry.Person'類型的變量'x',但未定義。

有沒有辦法做到這一點?

你不需要表達式 - 只需直接使用委托:

public void Call<U>(Func<T, U> aExpression, Action<U> returnClass)
{
    U result = aExpression(this.instance);
    returnClass(result);
}

您的方法調用應該起作用,然后:

var serviceWrapper = new Service<Person>(new Person());
serviceWrapper.Call(x => x.GetPersonById(2), u => Console.WriteLine(u));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM