获取MethodCallExpression的参数值

Fel*_*oto 13 c# lambda expression-trees

如何获取MethodCallExpression的参数值?

今天我这样做,但速度不够快:

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

这个方法从Expression获取值,但是如果我知道Expression总是来自MethodCallExpression.Arguments,我可以优化它吗?

我想我可以改变第一线,但我不知道如果适用于所有情况:

LambdaExpression l = Expression.Lambda(element);
Run Code Online (Sandbox Code Playgroud)

Sle*_*ith 4

蛋糕

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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 您为什么假设参数始终是常数? (9认同)
  • 因为如果不是,没有 .Compile() 就无法从中得到任何东西 (2认同)