2012-10-14 42 views
0

我試圖動態地創建一個類型爲Expression.Lambda<Action<Controller>>的lambda表達式。如何創建一個類型爲Expression.Lambda的lambda表達式<Action <Controller>>?動態

例如:x => x.Index()

var body = ??? 
Expression<Action<Controller>> action = Expression.Lambda<Action<Controller>>(body); 

我有控制器類型(Type)和控制器動作(的MemberInfo)。

+0

你是說實際的控制器是從'Controller'派生的類型?所以你實際上想要像'x =>((ConcreteController)x).Index()'? – svick

+0

Controller類屬於ASP.NET MVC。所有的控制器都是從這個類派生的。我也可以將我的問題更改爲:如何創建一個類型爲Expression.Lambda >的lambda表達式? – Rookian

回答

1

如果我正確理解你的問題,你可以使用Expression.Call()。例如:

Expression<Action<T>> CreateCallExpression<T>(MethodInfo method) 
{ 
    var parameter = Expression.Parameter(typeof(T), "x"); 
    return Expression.Lambda<Action<T>>(
     Expression.Call(parameter, method), parameter); 
} 
+0

你知道我該如何添加方法參數嗎?我嘗試Expression.Paramter和Expression.Variable沒有成功。 – Rookian

+0

這取決於您在哪裏獲得該參數的值?它應該是恆定的,還是從表達式的參數或別的東西? – svick

+0

它應該是常數默認值(默認值(T)) – Rookian

相關問題