reflection - 在 F# 中,如何获取函数的参数?

标签 reflection f#

给定一个函数列表,如何提取一个列表,其中包含列表中每个函数的第一个参数的类型?

列表定义为:

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/

相关文章:

c# - 绑定(bind)到当前项目中未声明的属性

java - 获取 java bean 属性名称的列表/数组,按照它们在源文件中出现的顺序排列

F#-如何从数组填充System.Collections.Generic.List

f# - 将整数列表转换为字符串

f# - 如何在 F# 中设置默认参数值?

java - 为什么不用 java.util.List 检查 java.lang.reflect.Field 的实例

java - 使用 pojo/java bean 的 getter 方法获取属性/字段名称?

c# - 如果方法参数也是 "out"参数,如何使用反射检查方法参数是否为 Nullable<>?

compiler-errors - 无法确定 F# 函数中的对象类型

windows-phone-7 - 适用于 Windows Phone 7.1 和 F# 3.0 的 FSharp.Core