Извлечь имя метода из дерева выражений?

Я пытаюсь реализовать следующий шаблон функция:

MethodInfo GetMethod(      
  Expression<Func<TTarget, EventHandler<TEventArgs>>> method)

Я могу предоставить экземпляр TTarget, если требуется

Желаемое использование:

public static void Main(string[] args)
{
    var methodInfo = GetMethod<Program, EventArgs>(t => t.Method);
    Console.WriteLine("Hello, world!");
}

private void Method(object sender, EventArgs e)
{
}

Вот что я пробовал до сих пор:

private static MethodInfo GetMethod(TTarget target, Expression<Func<TTarget, EventHandler<TEventArgs>>> method)
{
  var lambda = method as LambdaExpression;
  var body = lambda.Body as UnaryExpression;
  var call = body.Operand as MethodCallExpression;
  var mInfo = call.Method as MethodInfo;

  Console.WriteLine(mInfo);

  throw new NotImplementedException();
}

Он распечатывает:

System.Delegate CreateDelegate (System .Type, System.Object, System.Reflection.Met hodInfo)

7
задан Shimmy 26 January 2012 в 09:05
поделиться