¿Cómo crearía una instancia de Action<'T>
utilizando la reflexión? Aquí es lo que tengo:Cree una instancia de la acción <'T> utilizando la reflexión
let makeAction (typ:Type) (f:'T -> unit) =
let actionType = typedefof<Action<_>>.MakeGenericType(typ)
let converter = FSharpFunc.ToConverter(f)
Delegate.CreateDelegate(actionType, converter.Method)
el que vomita con:
System.ArgumentException: error unirse a secuencias diana método.
en System.Delegate.CreateDelegate (tipo tipo, método MethodInfo, Boolean throwOnBindFailure)
'T
es una interfaz, que typ
implementos.
¿Hay alguna razón específica por la que quiera hacer esto usando la reflexión? Como esto se puede hacer tan simple como: 'let makeAction (f: 'a -> unit) = new Action <'a> (f)' – Ankur
@Ankur: Sí, porque no sé ''a' (en tu ejemplo) en tiempo de compilación. – Daniel
No estoy seguro de si te entiendo correctamente, pero el ''a' aquí es igual que'' T' en tu código, es decir, un tipo genérico que se resuelve dependiendo del valor 'f' pasado. Necesita un tipo de acción que ajuste la función 'f' pasada ¿verdad? – Ankur