我有這種類型的表達式:如何從表達式樹中獲取參數名稱?
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