为什么我的F#函数的返回类型为bool?

fah*_*ash 0 reflection f#

我正在编写一个函数,它接受一个PropertyInfo对象,获取MyAttribute并返回一个MyAttribute对象:

let getparamattribute(p : PropertyInfo) = 
    let attr = p.GetCustomAttribute (typeof<MyAttribute>, true) 
    attr :? MyAttribute 
Run Code Online (Sandbox Code Playgroud)

但是FSI将返回类型显示为bool:

val getparamattribute : (PropertyInfo -> bool)
Run Code Online (Sandbox Code Playgroud)

为什么?

Mar*_*zek 6

这正是:?运营商所做的:

true如果值与指定的类型匹配,则返回; 否则,返回false(类型测试运算符).

您正在寻找的是:?>垂头丧气的运营商:

:?>运算符执行动态转换,这意味着该铸件的成功是在运行时确定.:?> 在编译时不检查使用运算符的强制转换; 但在运行时,会尝试强制转换为指定的类型.如果对象与目标类型兼容,则转换成功.如果对象与目标类型不兼容,则运行时会引发一个 InvalidCastException.

来自符号和运算符参考