如何使用反射創建Action<'T>
的實例?下面是我有:使用反射創建動作<'T>的實例
let makeAction (typ:Type) (f:'T -> unit) =
let actionType = typedefof<Action<_>>.MakeGenericType(typ)
let converter = FSharpFunc.ToConverter(f)
Delegate.CreateDelegate(actionType, converter.Method)
與barfs:
System.ArgumentException:錯誤綁定到目標方法。
在System.Delegate.CreateDelegate(類型類型,MethodInfo的方法,布爾throwOnBindFailure)
'T
是一個接口,它typ
器具。
是否有任何特定的原因想要使用反射來做到這一點?因爲這可以簡單地完成:'make makeAction(f:'a - > unit)= new Action <'a>(f)' – Ankur
@Ankur:是的,因爲我不知道'a'(在你的例子中)在編譯時。 – Daniel
不知道我是否正確地得到了你,但這裏的''a''與你的代碼中''T'相同,即一個通用類型,它根據傳遞的'f'值被解析。你需要一個包含傳遞的'f'函數的動作類型? – Ankur