I am trying to find a way to get the list of method calls inside a lambda expression in C# 3.5. For instance, in the code below, I would like to method LookAtThis(Action a) to analyze the content of the lambda expression. In other words, I want LookAtThis to return me the MethodInfo object of Create.
LookAtThis(() => Create(null, 0));
Is it possible?
Thanks!
This is fairly easy as long as you use Expression<Action>
instead of Action
. For full code, including how to get the actual values implied, see here - in particular ResolveMethod
(and how it is used by Invoke
). This is the code I use in protobuf-net to do RPC based on lambdas.
using System;
using System.Linq;
using System.Diagnostics;
using System.Reflection;
using System.Linq.Expressions;
class Program
{
static void Create(object o, int n) { Debug.Print("Create!"); }
static void LookAtThis(Expression expression)
{
//inspect:
MethodInfo method = ((MethodCallExpression)expression.Body).Method;
Debug.Print("Method = '{0}'", method.Name);
//execute:
Action action = expression.Compile();
action();
}
static void Main(string[] args)
{
LookAtThis((Expression)(() => Create(null, 0)));
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With