我有这种类型的表达式:如何从表达式树中获取参数名称?
Expression<Action<T>> expression
如何从这个表达式得到的参数名称(可选:和值)?
例如:
o => o.Method("value1", 2, new Object());
名称可以str_par1,int_par2,obj_par3
我有这种类型的表达式:如何从表达式树中获取参数名称?
Expression<Action<T>> expression
如何从这个表达式得到的参数名称(可选:和值)?
例如:
o => o.Method("value1", 2, new Object());
名称可以str_par1,int_par2,obj_par3
Expression<Action<Thing>> exp = o => o.Method(1, 2, 3);
var methodInfo = ((MethodCallExpression)exp.Body).Method;
var names = methodInfo.GetParameters().Select(pi => pi.Name);
你可以从Parameters
属性的参数名称。
例如:
Expression<Action<string, int>> expr = (a, b) => (a + b).ToString();
var names = expr.Parameters.Select(p => p.Name); //Names contains "a" and "b"
对于第二部分,lambda表达式都只是未编译的功能。
在您编译表达式并使用某些值调用委托之前,它们的参数没有值。
如果您采用lambda表达式i => i.ToString()
,哪里有任何参数值?
我实际上想要方法参数的名称o => o.Method(par1,par2,par3 ) – Omu 2010-01-29 15:30:02
如何从该表达式中获取参数名称?
expression.Parameters[0].Name
以备将来参考,文件是在这里:
http://msdn.microsoft.com/en-us/library/bb359453.aspx
(可选:和值)?
这对我没有任何意义。你能解释一下你和“价值观”的含义吗?
Method
的参数?从表达式中获取MethodInfo
(猜测,MethodCallExpression.Method
),然后使用MethodBase.GetParameters()
获取参数。 (ParameterInfo
有各种有用的属性,包括Name
)。
我其实想的方法O的参数名称=> o.Method(PAR1,PAR2,PAR3)
你有一些信念,我们的心灵,也许。
无论如何,继续前进。
我实际上想要方法的参数名称o => o。方法(PAR1,PAR2,PAR3)
第一次正式参数的名称是:
(expression.Body as MethodCallExpression).Method.GetParameters()[0].Name
这是第一个参数是
(expression.Body as MethodCallExpression).Arguments[0]
以备将来参考的表达,文档在这里:
http://msdn.microsoft.com/en-us/library/system.linq.expressions.methodcallexpression.arguments.aspx
你的价值观是什么意思? – jason 2010-01-29 15:12:42
我的意思是o => o.Method(“value”)//方法(字符串s)s是名字 – Omu 2010-01-29 15:22:45