4

Action デリゲートに渡されたメソッド名を取得しようとしています。これは私が持っているものです:

private static void DoAction(params Action<Group>[] actions)
{
    foreach (Action<Group> action in actions)
    {
        Console.WriteLine(action.Method.Name);
    }
}

そして主に、これはそれがどのように呼び出されるかです:

DoAction(y => y.DoBar(), z => z.DoFoo());

DoAction() メソッドの実行後、画面に「DoFoo」と「DoBar」が表示されることを望んでいましたが、代わりに <Main>b__0<Main>b__1. アクションデリゲートからターゲットメソッドの実際の名前を取得する方法があるかどうか疑問に思っていましたか? どんな助けでも大歓迎です。

4

1 に答える 1

8

入力タイプを an に変更してExpression、式がメソッド呼び出しであるかどうかを確認できます。

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

    }

}
于 2013-04-05T20:37:00.547 に答える