リフレクションを使用してAction<'T>
のインスタンスを作成するにはどうすればよいですか?ここで私が持っているものです。リフレクションを使用してアクション<'T>のインスタンスを作成する
System.ArgumentExceptionの:エラーがメソッドをターゲットに結合してbarfs
let makeAction (typ:Type) (f:'T -> unit) = let actionType = typedefof<Action<_>>.MakeGenericType(typ) let converter = FSharpFunc.ToConverter(f) Delegate.CreateDelegate(actionType, converter.Method)
を。 System.Delegate.CreateDelegate(タイプタイプ、METHODINFO法、ブールthrowOnBindFailure)で
'T
、そのtyp
実装のインタフェースです。
リフレクションを使用してこれを行う特別な理由はありますか? @Ankur:はい、私は '' a'(あなたの例では)を知りませんので、これは簡単です: 'let makeAction(f: 'a - > unit)= new Action <'a>(f)' – Ankur
@Ankur:コンパイル時に – Daniel
私が正しくあなたを得ているかどうかはわかりませんが、ここでの '' a''はあなたのコードで '' T'と同じです。すなわち、渡された 'f'値に応じて解決されるジェネリック型です。渡された 'f'関数をラップするアクション型が必要ですか? – Ankur