Obtención de valores de argumento de MethodCallExpression

c# expression-trees lambda

Pregunta

¿Cómo puedo obtener los valores de los argumentos de una MethodCallExpression?

Hoy lo hago de esta manera, pero no es lo suficientemente rápido.

private static object GetArgumentValue(Expression element)
{
    LambdaExpression l = Expression.Lambda(Expression.Convert(element, element.Type));
    return l.Compile().DynamicInvoke();
}

Este método obtiene valores de una expresión, pero si sé que la expresión siempre proviene de una MethodCallExpression.Arguments, ¿puedo optimizarla?

Creo que puedo cambiar la primera línea a esto, pero no sé si trabajo para todas las situaciones:

    LambdaExpression l = Expression.Lambda(element);

Respuesta popular

pastel

class Program
    {
        static void Main(string[] args)
        {
            Expression<Action<string>> action = a => Console.WriteLine("asdf");
            var mce = action.Body as MethodCallExpression;
            Console.WriteLine((mce.Arguments[0] as ConstantExpression).Value);
            Console.ReadKey();
        }
    }


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow