Как преобразовать вызов функции в MethodCallExpression

Я пытаюсь облегчить использование моей библиотеки для своих пользователей.

У меня есть интерфейс 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 ответ

Это то, что вы ищете:

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);
}
</t></a></a,int>

licensed under cc by-sa 3.0 with attribution.