Используя выражения linq, как я могу создать и вернуть делегата? - PullRequest
0 голосов
/ 08 января 2011

В C # я пытаюсь использовать выражения linq для генерации вызовов определенных методов. Одним из параметров метода является делегат. У меня есть MethodInfo для метода, который я хочу передать в качестве делегата. Я просто не уверен в синтаксисе linq для создания делегатов.

Это немного надумано, но я надеюсь, что это показывает, что я пытаюсь сделать:

[C#]
delegate void Example();

object instance = ...;
MethodInfo methodToCall = ...;
MethodInfo methodToReference = instance.GetType().GetMethod("Foo");
var lambda = Expression.Call(
    methodToCall,
    Expression.New(
      typeof(Example).GetConstructor(new [] { typeof(object), IntPtr }),
      Expression.Constant(instance),
      Expression.Constant(/* IntPtr from MethodInfo?? */)));

lambda.Compile()();

Проблема в том, что конструктор для делегата запрашивает IntPtr, я не уверен, как это получить! Есть ли более прямой способ создания объекта делегата, чем пытаться использовать метод выражения New ()?

1 Ответ

1 голос
/ 08 января 2011
Example e = (Example)Delegate.CreateDelegate(typeof(Example), instance, methodToReference);
...