Làm cách nào để tạo một thể hiện của Action<'T>
bằng cách sử dụng sự phản chiếu? Dưới đây là những gì tôi có:Tạo một thể hiện của Hành động <'T> bằng cách sử dụng phản chiếu
let makeAction (typ:Type) (f:'T -> unit) =
let actionType = typedefof<Action<_>>.MakeGenericType(typ)
let converter = FSharpFunc.ToConverter(f)
Delegate.CreateDelegate(actionType, converter.Method)
mà barfs với:
System.ArgumentException: Lỗi ràng buộc để nhắm mục tiêu phương pháp.
tại System.Delegate.CreateDelegate (Type type, phương pháp MethodInfo, Boolean throwOnBindFailure)
'T
là một giao diện, mà typ
cụ.
Có lý do cụ thể nào bạn muốn thực hiện điều này bằng cách sử dụng sự phản chiếu không? Vì điều này có thể được thực hiện đơn giản như: 'let makeAction (f: 'a -> unit) = new Action <'a> (f)' – Ankur
@Ankur: Vâng, bởi vì tôi không biết '' a' (trong ví dụ của bạn) tại thời gian biên dịch. – Daniel
Không chắc chắn nếu tôi nhận được bạn một cách chính xác, nhưng ''a' ở đây là giống như'' T' trong mã của bạn, tức là một loại chung được giải quyết tùy thuộc vào giá trị 'f' được truyền. Bạn cần một loại hành động bao bọc hàm 'f' được truyền đi đúng không? – Ankur