I'm trying to get the method name passed into an Action delegate. This is what I have:
private static void DoAction(params Action<Group>[] actions)
{
foreach (Action<Group> action in actions)
{
Console.WriteLine(action.Method.Name);
}
}
And in main, this is how it gets called:
DoAction(y => y.DoBar(), z => z.DoFoo());
After the execution of DoAction() method I was hoping to see "DoFoo" and "DoBar" on the screen, but it instead I see <Main>b__0
and <Main>b__1
. I was just wondering if there's a way to get the actual name of the target method from an action delegate? Any help is appreciated.
You can change the input type to an Expression
and then see if the expression is a method call:
private static void DoAction(params Expression<Action<Group>>[] actions)
{
foreach (var exp in actions)
{
var method = exp.Body as MethodCallExpression;
if(method != null)
Console.WriteLine(method.Method.Name);
// similar method for properties
var member = exp.Body as MemberExpression;
if (member != null)
Console.WriteLine(member.Member);
// execute the Action
Action<Group> act = exp.Compile();
Group g = new Group(); // create a Group to act on
act(g); // perform the action
}
}
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