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

Dan*_*nry 4 c# delegates

我正在尝试使用自己的方法创建一个类来处理远程服务器上的调用方法.为了使它对客户机调用更简单,我正在写一个接受的接口,这样编译器会知道的参数的数量和方法的返回类型的通用类.

public class Service<TInterface>
{
    public TResult Invoke<TResult>(Func<TInterface, TResult> function)
    {
        // Do the work
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public interface ICalculator
{
    int Add(int num1, int num2);
}
Run Code Online (Sandbox Code Playgroud)

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

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

问题是,在第一个代码块,我需要知道如何找出他们在LAMDA表达传递哪些参数.我怎么做?

Mar*_*ell 6

最简单的方法是Expression<Func<TInterface,TResult>取而代之; 这是微不足道的分裂.实际上,您可以从这里解除我的代码,涵盖大多数情况.特别要看一下ResolveMethod.这部分的讨论/解释是在这里.