特定のモジュールで F# 関数への関数呼び出しを含む式ツリーを作成しようとしています。ただし、System.Linq.Expressions.Expression.Call()ヘルパー関数が提供している関数を見つけることができないため、何かが欠けています。
Call() 呼び出しにより、InvalidOperationExceptionが返されます: 「タイプ 'TestReflection.Functions' のメソッド 'myFunction' は、指定された引数と互換性がありません。」
私が間違っていることについて誰かが私にヒントを与えることができれば、それは非常に役に立ちます。
以下のコードを参照してください。
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))
よろしく、リッカード