1
我正試圖創建一個表達式樹,其中包含對某個模塊上的F#函數的函數調用。但是,我失去了一些東西,因爲幫助函數無法找到我提供的函數System.Linq.Expressions.Expression.Call()。通過Linq表達式樹MethodCallExpression節點調用F#函數?
呼叫()調用給出了一個InvalidOperationException異常:「沒有方法上鍵入'myFunction的‘TestReflection.Functions’是與提供的參數兼容。」
如果任何人都可以給我一個提示我做錯了這將是非常有幫助的。
見下面的代碼:
namespace TestReflection
open System.Linq.Expressions
module Functions =
let myFunction (x: float) =
x*x
let assem = System.Reflection.Assembly.GetExecutingAssembly()
let modul = assem.GetType("TestReflection.Functions")
let mi = modul.GetMethod("myFunction")
let pi = mi.GetParameters()
let argTypes =
Array.map
(fun (x: System.Reflection.ParameterInfo) -> x.ParameterType) pi
let parArray =
[| (Expression.Parameter(typeof<float>, "a") :> Expression); |]
let ce = Expression.Call(modul, mi.Name, argTypes, parArray)
let del = (Expression.Lambda<System.Func<float, float>>(ce)).Compile()
printf "%A" (Functions.del.Invoke(3.5))
問候, 裏卡德
這就像一個魅力 - 謝謝你! – Rickard 2009-10-12 19:58:35