Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将函数调用转换为MethodCallExpression_C# - Fatal编程技术网

C# 如何将函数调用转换为MethodCallExpression

C# 如何将函数调用转换为MethodCallExpression,c#,C#,我正在努力为我的用户方便使用我的库 我有一个接口I和一个类a public interface I { int f(int i); } public class A : I { public int f(int i) { return i * i; } } 我试图编写一个函数调用,调用f并进行操作 static void Main(string[] args) { I obj = new A(); Call(obj.f(3)); }

我正在努力为我的用户方便使用我的库

我有一个接口I和一个类a

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

public class A : I
{
   public int f(int i)
   {
      return i * i;
   }
}
我试图编写一个函数调用,调用f并进行操作

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

    Call(obj.f(3));
}
但我不知道如何将函数转换为“Call”函数。我的目标是,调用是通用的,并将与所有类型的工作! 所以我尝试了
MethodCallExpression
,但我真的不知道如何将obj.f(3)转换成
MethodCallExpression

public void Call(MethodCallExpression expr)
{

}

非常感谢您的帮助:)

这就是您要找的:

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);
}
static void Main(字符串[]args)
{
I obj=新的A();
Func表达式=(a=>a.f(3))
调用(表达式,obj);
}
公共void调用(MethodCallExpression表达式,T数据)
{
expr(数据);
}

嗯?你想做什么?检查这个问题我想执行代码obj.f(3)(它将在不同的线程中运行)并返回一个Func。通常:var x=调用(obj.f(3));然后是Console.Out(x());。A没有实现I,因为方法f不公开。你仍然很不清楚。请提供一个完整的例子。是的,它可以是第一个解决方案!但是,如果有一种方法可以传递一个要调用的函数,而不是立即对其求值,那就更好了:)我更改了它,以显示如何对调用函数内部的表达式求值。Func似乎不能强制转换为MethodCallExpression。这是一个很好的表达