извлечение имени метода из выражения linq - PullRequest
6 голосов
/ 12 февраля 2010

Как я могу получить имя первого метода, вызванного из выражения в C #? Что-то вроде вымышленного MethodUtils.NameFromExpression () ниже:

Expression<Action<string>> expr = s => s.Trim();
Assert.AreEqual("Trim", MethodUtils.NameFromExpression(expr));

В идеале любой метод util должен быть написан / перегружен таким образом, чтобы он мог принимать выражения для любых типов делегатов Action или Func.

Заранее спасибо.

UPDATE

Я нашел ответ (ниже), но все равно хотел бы узнать, является ли это хорошим решением или уже существует способ сделать это в BCL.

1 Ответ

10 голосов
/ 12 февраля 2010

Немного покопался в отладчике, и я ответил на свой вопрос:

public static class MethodUtils
{
    public static string NameFromExpression(LambdaExpression expression)
    {
        MethodCallExpression callExpression = 
            expression.Body as MethodCallExpression;

        if(callExpression == null)
        {                
            throw new Exception("expression must be a MethodCallExpression");
        }

        return callExpression.Method.Name;
    }
}

Есть какие-нибудь комментарии по этой реализации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...