Getting method name from an Action delegate

c#, delegates, methodinfo

Solution

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

    }

}

Problem

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.

Original source