你如何检查传递给委托的参数?

时间:2010-08-02 11:38:44

标签: c# delegates

我正在尝试使用自己的方法创建一个类来处理远程服务器上的调用方法。为了使客户端调用程序更容易,我正在编写一个接受接口的泛型类,以便编译器知道参数的数量和方法的返回类型。

public class Service<TInterface>
{
    public TResult Invoke<TResult>(Func<TInterface, TResult> function)
    {
        // Do the work
    }
}

所以我们的想法是他们可以引用具有接口的程序集,例如:

public interface ICalculator
{
    int Add(int num1, int num2);
}

然后他们可以编写代码来点击服务:

var addend = new Service<ICalculator>(/* constructor */).Invoke(s => s.Add(3, 4));

问题是在第一个代码块中,我需要知道如何找出它们在lamda表达式中传递的参数。我该怎么做?

1 个答案:

答案 0 :(得分:6)

最简单的方法是改为Expression<Func<TInterface,TResult>;这是微不足道的分裂。实际上,您可以解除涵盖大多数情况的代码from here。特别要看ResolveMethod。对此的一些讨论/解释是here