C# 如何将函数调用转换为MethodCallExpression
我正在努力为我的用户方便使用我的库 我有一个接口I和一个类aC# 如何将函数调用转换为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)); }
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。这是一个很好的表达