获取MethodCallExpression的参数值
如何获取MethodCallExpression的参数值?获取MethodCallExpression的参数值
今天我做到这一点的方式,但isn't速度不够快:
private static object GetArgumentValue(Expression element)
{
LambdaExpression l = Expression.Lambda(Expression.Convert(element, element.Type));
return l.Compile().DynamicInvoke();
}
这种方法从表达得值,但如果我知道,表达总是来自MethodCallExpression.Arguments我可以优化呢?
我想我可以改变第一线,这一点,但我不知道是否适用于所有情况:
LambdaExpression l = Expression.Lambda(element);
蛋糕
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();
}
}
蛋糕? (然后一些填充文本,所以5个字母的评论可以张贴) – joce 2011-05-20 04:51:46
一块蛋糕:) – 2011-05-20 05:31:36
为什么你认为参数将永远是常量? – 2011-05-20 11:40:59
我会尝试这个返回对象:
private static object _getValue(MethodCallExpression expression)
{
var objectMember = Expression.Convert(expression, typeof(object));
var getterLambda = Expression.Lambda<Func<object>>(objectMember);
var getter = getterLambda.Compile();
return getter();
}
然后调用以下函数要快得多:
LambdaExpression l = Expression.Lambda(Expression.Convert(element, element.Type));
return l.Compile().DynamicInvoke();
为什么投票? – TheMiddleMan 2015-11-13 14:21:54
你的意思是像“object [] args = methodCallExpression.Arguments.Select(p => p.Value);”? – 2011-03-25 14:04:20
@Rodrigo这就是我要找的,但价值不是表达式的属性。 – Langdon 2011-04-12 20:46:34