如何将函数调用转换为MethodCallExpression

时间:2011-06-29 15:45:15

标签: c#

我正在尝试为我的用户使用我的库。

我有一个接口I和一个A类......

public interface I
{
    int f(int i);
}

public class A : I
{
   public int f(int i)
   {
      return i * i;
   }
}

我正在尝试编写一个函数Call来调用f并进行操作。

static void Main(string[] args)
{
    I obj = new A();

    Call(obj.f(3));
}

但我不知道如何将该功能纳入“调用”功能。我的目标是通话是通用的,适用于所有类型! 所以我尝试使用MethodCallExpression,但我真的不知道如何将obj.f(3)转换为MethodCallExpression ....

public void Call(MethodCallExpression expr)
{

}

非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

这就是你要找的东西:

static void Main(string[] args)
{
    I obj = new A();
    Func<A,int> expression = (a => a.f(3))
    Call<A>(expression, obj);
}

public void Call<T>(MethodCallExpression expr, T data)
{
    expr(data);
}