给定一个函数列表,如何提取一个列表,其中包含列表中每个函数的第一个参数的类型?
列表定义为:
let messageHandlers = [
fun (message: MessageA) -> (), // Cast
fun (message: MessageB) -> () // Cast
]
类型列表可以定义为:
let getFirstParam x = x.GetType().UseReflectionToGetTheParameters
let types = List.map getFirstParam messageHandlers
我本来希望在 FSharpFunc
上有一个名为 Parameters
或类似名称的列表,但我找不到。
最佳答案
如何改为静态获取类型,以避免出错的风险,如下所示:
let messageHandlers, types =
let withArgType (f: 'T -> unit) = (f :> obj, typeof<'T>)
[
withArgType (fun (param1: MessageA) -> ())
withArgType (fun (param1: MessageB) -> ())
]
|> List.unzip
关于reflection - 在 F# 中,如何获取函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40518885/